从Xcode7到Xcode8的自动打包脚本

每一次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,感兴趣的朋友可以自行下载查看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容