iOS多应用自动打包

摘要:
互联网上的许多文章都是陈词滥调。XCode多次更新后,不再使用脚本和命令。我使用xcodebuild命令直接打印ipa包,然后重新签名并导出它。然而,在执行xcrun-sdkiphoneosPackageApplication命令时,我们发现新版本的OSX没有PackageApplication工具。XCode8.3将在导出时根据bundleid自动重新签名,但问题是嵌入的。不会自动修改包中的mobileprovision文件,这将导致在使用ApplicationLoader上载包时报告错误,称配置文件与签名证书不匹配。
多应用自动打包

前言

网上很多文章都是陈词滥调,老黄历啦,在XCode多次更新后,那些脚本,那些命令已经不管用啦。

本文是基于XCode8.3版本的。

需求描述

要求做一个工具,可以批量打上百个应用,这些应用有不同的icon,启动图,bundleID,第三方账号,和其他一些业务相关的差异。

做起来~

重签名打包是有多种方法实现的。

我原来是用xcodebuild命令直接打出ipa包,然后重签名再导出的。

但执行xcrun -sdk iphoneos PackageApplication命令时发现,新版OS X已经没有PackageApplication工具了。

所以采用了以下方法:编译出xcarchive包,再使用xcodebuild导出ipa。

编译

xcodebuild -quiet -workspace xxx.xcworkspace -scheme xxx -configuration Release clean -sdk iphoneos -archivePath xxx.xcarchive archive

修改

修改bundleID等Info.plist中的内容:

简单的数据格式:

defaults write ${InfoPlistPath} key value

复杂的数据格式:

defaults write $InfoPlistPath "CFBundleURLTypes" -array-add "<dict>
			<key>CFBundleTypeRole</key>
			<string>Editor</string>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>xxx</string>
			</array>
		</dict>"	

修改icon等资源文件

使用cp命令替换

重签名

一段题外话:由于某些错误,我打出了可以安装成功的adhoc包,但是检查证书才发现,是用的dev证书签名的,也是够神奇的了。

XCode8.3会在导出时自动根据bundleid重签名,但问题是不会自动修改包里的embedded.mobileprovision文件(也就是配置文件),会导致在使用Application Loader上传包时,报错说配置文件与签名证书不符。

我尝试过直接使用cp替换配置文件,但在导出时,它又给我换回去了。。。

所以采取了先重签名再导出的方法。

security cms -D -i "embedded.mobileprovision" > t_entitlements_full.plist
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' t_entitlements_full.plist > entitlements.plist
Entitlements=entitlements.plist

codesign -f -s "$tcertificationname" --entitlements $Entitlements ${tapppackagepath}

注意:--entitlements $Entitlements这个参数十分重要,对应的是一个plist文件,但不能通过手动编辑的方式生成这个文件,必须通过命令(好神奇吧)。

关于entitlements后续更新。

导出

defaults write ${exportoptionsplistpath} "teamID" "${tteamid}"
defaults write ${exportoptionsplistpath} "export_method" "${texportmethod}"
defaults write ${exportoptionsplistpath} "uploadSymbols" -bool true

xcodebuild  -exportArchive -exportOptionsPlist ${exportoptionsplistpath} -archivePath xxx.xcarchive -exportPath

-exportOptionsPlist参数是新出的,目前已知的参数有:

  • teamID
  • export_method:值为ad-hoc或者app-store,如果找不到该参数,就会使用dev证书签名。。。
  • uploadSymbols

免责声明:文章转载自《iOS多应用自动打包》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vim:将刚写的单词大写和单词的定义TreeView和TabControl下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS7.X)和ossec-agent(CentOS7.X))(图文详解)

OSSEC是一款开源的基于主机的入侵检测系统,可以简称为HIDS。它具备日志分析,文件完整性检查,策略监控,rootkit检测,实时报警以及联动响应等功能。详细的介绍和文档可以参考官网网站:http://www.ossec.net/环境本文中的环境极其简单,两台CentOS7虚拟机。CentOS7的安装详解服务端:  计算机名:ossec-server  I...

com.aliyun.openservices.shade.com.alibaba.fastjson.JSONException: exepct '[', but {, pos 1, line 1, column 2

错误报告的原因:您放置了一个非List对象,但希望从packagetest中取出List对象;导入java.text。SimpleDateFormat;导入java.util。阵列列表;导入java.util。日期导入java.util。列表importcom.alibaba.fastjson。JSON;导入com.alibaba.fastj...

kernel: blk_update_request: I/O error, dev fd0, sector 0

检查后,控制台无法登录。重新启动虚拟机,报告下图,然后执行journalctl以显示以下系统消息日志原因搜索。。。...

试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

解决方法:iis应用程序池--˃高级设置--˃启用32位应用程序˂!body{font-family:"Verdana";font-weight:normal;font-size:.7em;color:black;}p{font-family:"Verdana";font-weight:normal;color:black;margin-top:-5px}b...

SpringBoot入门 (三) 日志配置

上一篇博客文章记录了在spring-boot项目中读取的属性文件中配置的属性。本文将学习如何登录springboot项目。SpringBoot在内部使用CommonsLogging进行日志记录,但它也为其他日志记录框架提供默认配置,如JavautilLogging、Log4j2和Logback。在每种情况下,日志记录器都预先配置为使用控制台输出和可选文件输出...

uniapp 实现动态切换全局主题色

要求:要在开发的应用程序中切换主题颜色,如果只需要一种主题颜色,但不需要切换,则可以使用uniappSCSS文件文档思想:预先在公共css中定义所需的主题颜色。这里只是一个定义两种颜色的参考文档的示例,可以从中获得想法。您可以使用css属性选择器动态设置数据xx以动态更改主题颜色。最初,您希望将一个变量直接混合到mixin中,以实现主题颜色的全局控制,忽略了...