使用场景
很多做react-native开发的工程师,使用的不一定是Mac电脑,所以打iOS的ipa包就没有Xcode工具去图形界面上操作,比如勾选证书、pp文件之类的,本文针对此,在一些网上的教程上做了更改
Xcode8开始有了自动管理签名文件功能,并且是默认的,所以网上现有的脚本很多都挂了
- 添加的命令行
rootObject=`/usr/libexec/PlistBuddy -c "Print :rootObject" $pbxproj_path`
targetList=`/usr/libexec/PlistBuddy -c "Print :objects:${rootObject}:targets" $pbxproj_path | sed -e '/Array {/d' -e '/}/d' -e 's/^[ \t]*//'`
targets=(`echo $targetList`)
targetsID=${targets[0]}
上述命令行的主要功能,就是在项目的iOS工程包中获取到 TestTargetID
,就是下面 13B07F861A680F5B00A75B9A
这个值,因为从未用xcode打开并操作过证书那块的,.xcodeproj文件中没有下面这三行代码
TargetAttributes = {
00E356ED1AD99517003FC87E = {
CreatedOnToolsVersion = 6.2;
DevelopmentTeam = ZLV92V5957;
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = { //从这开始的三行代码
ProvisioningStyle = Manual;
};
...
}
- 添加如下命令行,用来插入上面三行:
/usr/libexec/PlistBuddy -c "Add :objects:${rootObject}:attributes:TargetAttributes:${targetsID}:" $pbxproj_path
/usr/libexec/PlistBuddy -c "Add :objects:${rootObject}:attributes:TargetAttributes:${targetsID}:ProvisioningStyle String Manual" $pbxproj_path
- 下面需要把
.xcodeproj
文件中已有的ProvisioningStyle
字段的值改为Manual
# xcode8 之后强行将所有 Automatic 改为 Manual
sed -i "" s/'Automatic'/'Manual'/g ${project_name}.xcodeproj/project.pbxproj
这边说一下,为什么不用网上搜到的下面这句命令行,是因为我们上面对.xocdeproj文件做了改动插入了那三行代码,这个文件的格式被改变了,变成了一个plist文件,所以下面的命令行无法找到对应的字段去修改(这段命令行可以省略的)
# xcode8 之后会自动管理证书签名,需要修改成手动管理(该命令在文件格式变成plist之后失效,但仍需保留,防止以后用到)
sed -i "" s/'ProvisioningStyle = Automatic;'/'ProvisioningStyle = Manual;'/g ${project_name}.xcodeproj/project.pbxproj
完整的代码放到其他文档了,看起来比较乱,https://www.jianshu.com/p/906c7a563333