美文网首页深入浅出iOSiOS DeveloperDevSupport
从Xcode7到Xcode8的自动打包脚本

从Xcode7到Xcode8的自动打包脚本

作者: edison0951 | 来源:发表于2016-09-27 17:34 被阅读2038次

    每一次Xcode大版本更新,伴随而来的不仅仅是SDK的更新,最让人苦恼的是之前的插件全部不能用以及自动打包脚本的重写。下面我们主要关注Xcode7到Xcode8自动打包的一些变更。

    Xcode7

    代码编译

    xcodebuild -workspace "${SCHEME_NAME}.xcworkspace" -scheme "${SCHEME_NAME}"

    -sdk iphoneos -configuration "${BUILD_CONFIGURATION}" build CODE_SIGN_IDENTITY="${IDENTITY_NAME}"

    PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" SYMROOT=${BUILD_PATH}

    SCHEME_NAME:scheme名称

    BUILD_CONFIGURATION:构建配置(比如inhouse/release/enterprise)

    IDENTITY_NAME:证书的文件名(在keychain中可以获取到对应的文件名)

    PROVISIONING_PROFILE:授权文件对应的文件名称(形式如:49cac5ce-3c77-472b-9abb-7c463a8bea92)

    BUILD_PATH:编译之后存放的目录

    应用打包

    xcrun -sdk "${TARGET_SDK}" -v PackageApplication "${PROJECT_BUILDDIR}/${SCHEME_NAME}.app" -o "${BUILD_OUTPUT_DIR}/${APP_NAME}.ipa"

    TARGET_SDK:iphoneos(sdk版本,会根据系统当前sdk自动选择)

    SCHEME_NAME:scheme名称

    PROJECT_BUILDDIR:编译的目录

    BUILD_OUTPUT_DIR:打包后的输出目录

    APP_NAME:文件名称


    Xcode8

    代码归档

    xcodebuild -scheme "${SCHEME_NAME}" -sdk "${TARGET_SDK}"

    -archivePath "${PROJECT_BUILDDIR} ${SCHEME_NAME}.xcarchive"

    -configuration Release PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" archive

    TARGET_SDK:iphoneos(sdk版本,会根据系统当前sdk自动选择)

    SCHEME_NAME:scheme名称

    PROJECT_BUILDDIR:编译的目录

    PROVISIONING_PROFILE:授权文件对应的文件名称(形式如:49cac5ce-3c77-472b-9abb-7c463a8bea92)

    将归档文件导出为ipa

    xcodebuild -exportArchive -archivePath "${PROJECT_BUILDDIR}/${SCHEME_NAME}.xcarchive"

    -exportOptionsPlist"${EXPORT_PLIST}" -exportPath "${BUILD_OUTPUT_DIR}"

    SCHEME_NAME:scheme名称

    PROJECT_BUILDDIR:编译的目录

    EXPORT_PLIST:plist文件路径(导出相关信息的配置)

    BUILD_OUTPUT_DIR:ipa最终的导出目录

    其中Plist文件格式如下

    InHouse plist (由于编辑器不支持xml,只能选择放图片了)

    依次按照上面的步骤,写完编译脚本,感觉里面就要完成了。但是Xcode8的问题才刚刚开始

    问题1、Xcode8多了一个Automatically manage signing(自动管理签名)

    解决:需要将自动管理替换为手动管理

    sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/g' ${PROJECT_DIR}/project.pbxproj"

    问题2、改成手动管理后,由于我们的企业版和App Store的版的bundle id和开发者Team完全不一样

    解决:通过脚本修改Bundle ID,然后将工程中的Developer 替换为Distribution

    替换bundle id

    sed -i '' 's/${OLD_BUNDLE_ID}/${NEW_BUNDLE_ID}/g' ${PROJECT_DIR}/project.pbxproj

    替换打包类型

    sed -i '' 's/iPhone Developer/iPhone Distribution/g' ${PROJECT_DIR}/project.pbxproj

    最终的编译脚本已经放到了github,感兴趣的朋友可以自行下载查看

    相关文章

      网友评论

      • 南方小金豆:xcodebuild: error: 'xxx.xcworkspace' does not exist 使用脚本打包提示说这个;知道该怎么解决嘛
        edison0951:@那份牵挂给了谁 这个xxxxcworkspace就是你的工程
      • 9adf756dac97:你好,脚本里有很多参数配置不是很清楚,可以详细说明下吗?
        edison0951:哪里不是很清楚呢?
      • 6c0c16270784:你好 , 刚接触打包脚本 , 个人账号发现 在打包时无法选用Automatically manage signing,只能自己手动去指定,这个有办法解决吗
        edison0951:@死了也要输出 本来就是要手动自定呀,我的脚本里面专门将这个设置为手动呀
      • 顺其sun自然:你好,我有在找关闭bitcode的配置,但是试了你的compileBitcode这个key是没有用的,希望可以得到你的帮助。
        edison0951:@缪宇青 在build setting那一栏搜索bitcode,选择NO就行了
        c01c837eb82d:@edison0951 如何设置默认关闭
        edison0951:你在工程里面默认关闭不就行了吗?
      • WGGHot:可以加你qq吗 请教一个问题
        edison0951:什么问题?

      本文标题:从Xcode7到Xcode8的自动打包脚本

      本文链接:https://www.haomeiwen.com/subject/zmclcttx.html