首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

创建 Android、iOS 打包服务器

  •  
  •   zongren · 2016-10-14 09:10:06 +08:00 · 4547 次点击
    这是一个创建于 1097 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们公司有个项目,需要根据不同的客户快速打包( apk 、 ipa ),然后上传市场,请问有什么好的解决办法吗
    目前想到的办法是搭建内部服务器( macOS ),客服输入客户的相关信息(包名,第三方应用 App Key ,图标等),然后复制一份代码并修改(字符串匹配),调用命令行打包工具,客服手动上传 apk 、 ipa 到市场
    主要复制代码并修改这一步
    27 回复  |  直到 2016-10-14 14:47:56 +08:00
        1
    0x5e   2016-10-14 09:39:46 +08:00
    可以把配置放在一份 plist 文件里,和图片资源一样只是替换文件,尽量不改代码
        2
    murmur   2016-10-14 09:40:06 +08:00
    我们用的 cordova 30 多个发布版(没办法。。虽然是一个东西,但是用户要求自己的 logo 乱七八糟一堆 图标什么的,然后 bundle Id 也一堆,乱七八糟 provision 什么)
    只能改总配置 cordova 重新生成项目
    另外 xcode 的脑残工程格式绝对不是人能理解的 一层套一层 如果你只是认为每个文件都有一个 uuid 就错了 他那个嵌套的层级关系恶心到你想吐 同样的东西你不知道要改几次
        3
    grayon   2016-10-14 09:42:08 +08:00
    jenkins 持续集成环境
        4
    zongren   2016-10-14 09:43:46 +08:00
    @0x5e 你是说需要用到这些信息的时候,用代码读取 plist 吗
        5
    zongren   2016-10-14 09:43:57 +08:00
    @grayon 好的,我会了解一下
        6
    zongren   2016-10-14 09:44:10 +08:00
    @murmur 你们是人工改吗
        7
    murmur   2016-10-14 09:45:37 +08:00
    @zongren 写了个 nodejs 脚本去编辑这些信息 本来是想挂钩 cordova 的几个步骤的 后来发现有些东西光挂钩做不到 干脆就直接在 build 前全改好了
        8
    zongren   2016-10-14 09:48:52 +08:00
    @murmur 是一个一个文件替换字符串吗
        9
    0x5e   2016-10-14 09:49:07 +08:00
    @zongren 是的,这样还有个好处,其实不用再编译了,把 ipa 解压,替换资源文件重新签名就可以了。。
        10
    hellboys   2016-10-14 09:50:49 +08:00
    建立不同的 Configuration, Project-UserA.xcconfig,Project-UserB.xcconfig

    https://github.com/facebook/pop/tree/master/Configuration/Projects
        11
    zongren   2016-10-14 09:55:16 +08:00
    @0x5e 这个挺好,能解决第三方配置的修改问题
        12
    holmesabc   2016-10-14 09:56:36 +08:00   ♥ 1
    我是用 jenkins ,打 Android
    配合各种 Bash 脚本,偶尔写几个专用的命令行小工具。
    sed 来修改 gradle 参数等。

    jenkins 还自带 API ,完全也可自己封个后台给客户
        13
    chmlai   2016-10-14 10:13:59 +08:00   ♥ 1
    fastlane
        14
    LancerXin   2016-10-14 10:15:09 +08:00   ♥ 1
    docker+jenkins 比较好,有时候需要编译多个环境版本,环境变量需要隔离,配置比较麻烦,直接用 docker 隔离省事很多,以后迁移和方便
        15
    zongren   2016-10-14 11:00:22 +08:00
    @holmesabc
    @LancerXin
    @chmlai
    多谢回复,正在了解
        16
    xiubin   2016-10-14 11:23:01 +08:00 via iPhone
    我之前做过一次,把不同的写成配置文件,编译之前用脚本修改
        17
    zongren   2016-10-14 11:34:57 +08:00
    @hellboys 不太清楚怎么用,文件中定义的变量是作为宏吗
        18
    agassi_yzh   2016-10-14 11:41:51 +08:00
    jenkins + Fastlane
        19
    coagent   2016-10-14 12:46:48 +08:00
    我们 iOS 打包是 fastlane, Android 是 Gradle ,全部配置到 Jenkins 里去,内测用 Fir.im, Bugly ,在 Jenkins 里有多个 Project, 调不同的代码分支,该分支有代码更新自动打包,测试人员通过 fir.im, bugly 二维码下载 APP 安装。线上发布走 master 分支,手动触发打包。
        20
    zongren   2016-10-14 12:47:18 +08:00
    @coagent 多谢回复!
        21
    coagent   2016-10-14 12:47:55 +08:00
    @LancerXin Xcode 怎办?
        22
    coagent   2016-10-14 12:52:16 +08:00
    @zongren 不客气的。客户的相关信息(包名,第三方应用 App Key ,图标等),这些可以做成配置类的脚本或者 XML 之类的,然后扔 GIT 里,每次打包时更新,然后脚本改相关信息后再继续打包.
        23
    0x5e   2016-10-14 13:52:01 +08:00
    @coagent 有个 linux 下的签名实现 isign ,不过还不太完善
        24
    ma125125t   2016-10-14 14:38:35 +08:00
    做过,用的是 jenkins ,属于比较通用的 CI 了,但是要注意的是, iOS 的打包必须使用 OS 系统,你服务器得买一台 OS 云服务器或者用自己的 mac 搭建一个服务器。
        25
    ma125125t   2016-10-14 14:41:54 +08:00
    jenkins 会不间断地自动去 git 上指定分支进行打包,并且可以根据时间戳、版本号修改当前版本号、编译号,打包完成后可以自动执行脚本,调用第三方市场的上传应用 API 。方便得很
        26
    zongren   2016-10-14 14:46:24 +08:00
    @ma125125t 肯定要用 macOS 系统,这个还是知道的,其实用 git 分支也是个解决办法,不过时不时把需要修改的文件放在分支中,不会把整个项目放里面呢
        27
    kitalphaj   2016-10-14 14:47:56 +08:00
    现在主流是 fastlane , iOS 还有一个开源库叫 XcodeEditor ,你可以用它写一个程序专门生成特定的 target ,然后用 fastlane 编译打包上传。 Android 你可以借助 gradle 的 buildType 和 productFlavor 。 iOS 你基本上可以完全自动,但是 Android 你要是想发布 Play Store 暂时无法完成上传截图什么的。我们公司用这个方法搞的,挺方便。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4023 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 09:46 · PVG 17:46 · LAX 02:46 · JFK 05:46
    ♥ Do have faith in what you're doing.