从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文件格式如下


从Xcode7到Xcode8的自动打包脚本_第1张图片
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,感兴趣的朋友可以自行下载查看

你可能感兴趣的:(从Xcode7到Xcode8的自动打包脚本)