xcode打包脚本
‘壹’ iOS自动化打包脚本(Shell)
相比于Xcode打包,自动化脚本打包可以更有效地解放生产力,不需要一步步操作等待.
ExportOption.plist 文件配置如下图所示,
[图片上传失败...(image-8ab379-1626745287775)]
<figcaption style="display: block;">ExportOptions.plist</figcaption>
provisioningProfiles 字典中的值是项目的 bundle id 以及对应描述文件的名字, 配置该文件有一个取巧的方法, 直接使用Xcode打包, 之后直接导出 ipa 即可得到一份该文件, 如下图所示:
[图片上传失败...(image-5ca4e4-1626745287775)]
<figcaption style="display: block;">Xcode打包获取ExportOptions.plist文件</figcaption>
注意: 如果是使用Xcode自动打包需要更改 plist 文件中的 signingStyle 的值为 manual
xcodebuild 更多详细使用, 在终端中输入:
‘贰’ Xcode9打包脚本报错requires a provisioning profile with the Push Notifications feature.
解决办法,手誉知纯动用Xcode archive 一份,然后会生成正确的对应的plisty文件,然后再把这个plist文件按你打包配置猛孝的文件名位置放过去,就行了,实庆咐际原因在于:
文件一览
‘叁’ iOS开发知识体系之《脚本自动化打包--xcodebuild》
iOS脚本自动化打包方案--xcodebuild
本文主要xcodebuild脚本自动化打包并上传到蒲公英或者AppStore,废话不多说,直接上干货!
先了解一下xcodebuild打包需要的一些指令
-workspace XXX.xcworkspace
XXX.xcworkspace需要编译工程的工作空间名称,如果工程不是.xcworkspace的,可以不需要-workspace XXX.xcworkspace这段话
-scheme XXX
XXX是工程名称,-scheme XXX是指定构建工程的名称
-configuration Release
填入打包的方式是Debug或Release,就跟在Xcode中编译前需要在Edit scheme的Build configuration中选择打出来的包是Debug还是Release包一样,-configuration就是配置编译的Build configuration
-archivePath ./myArchivePath
配置生成.xcarchive的路径, ./表示生成在当前目录下,myArchivePath是生成的.Archive文件名称
ODE_SIGN_IDENTITY=证书
配置打包的指定证书,如果该工程的Xcode已经配置好了证书,那么不加入这段话也可以,打包出来的证书就是Xcode中配置好的。
PROVISIONING_PROFILE=描述文件UUID
配置打包的描述文件,同上,Xcode已经配置好了就不用在填入这段话了
CONFIGURATION_BUILD_DIR
配置编译文件的输出路径,如果需要用到.xcarchive文件内部的dSYM等文件,可以使用改字段指定输出路径。
如果工程是勾选了Automatically manage signing,那么就不用在配置ODE_SIGN_IDENTITY和PROVISIONING_PROFILE,今天这里讲到的Automatically manage signing自动配置证书,手动配置的就不多说了,有兴趣的话可以自己研究。
xcode工程配置自动获取证书,如下图:
打包所需要文件
配置打包的ExportOptions.plist文件,可以在任意一个Xcode工程中新建一个ExportOptions.plist文件。dev和adHoc和AppStore的配置文件内容不一样,可以先手动打包后看下plist文件的样式,这里提供一个样例:
这里method对应的value为打包对应的环境,有development、ad-hoc、app-store、enterprise根据打包环境来配置不同的值
编译脚本命令
xcodebuild archive -workspace XXX.xcworkspace -scheme XXX -configuration Release -archivePath ./myArchivePath CONFIGURATION_BUILD_DIR ./dir ODE_SIGN_IDENTITY=证书 PROVISIONING_PROFILE=描述文件UUID
导出ipa包命令
xcodebuild -exportArchive -archivePath ./myArchivePath.xcarchive -exportOptionsPlist ./ExportOptions.plist -exportPath ./out
-archivePath ./myArchivePath.xcarchive指定需要打包的.xcarchive路径,./myArchivePath.xcarchive表示在当前终端路径下的myArchivePath.xcarchive文件
-exportOptionsPlist ./ExportOptions.plist指定打包需要的ExportOptions.plist配置文件路径
-exportPath ./out指定打包输出的路径, ./out表示打包结果输出在终端的当前路径下的out文件家中。如果没有out文件夹会自动创建一个
脚本操作
首先:cd到需要自动打包的工程下
然后:在终端中输入touch xcodebuild.sh创建xcodebuild.sh脚本文件
然后:双击打开脚本写入下面 脚本内容(请确保所有版本的plist配置文件都写好了)
最后:在终端中输入./xcodebuild.sh运行脚本,按照步骤完成打包选择(如果运行的时候出现Permission denied,请先在终端中执行chmod a+x *.文件的后缀名后,在运行,相当于提高脚本文件的权限)
脚本内容
此脚本包含了自动上传蒲公英的选择操作,根据输入指令来执行具体操作
脚本实现
具体详细脚本见GitHub地址: https://github.com/Luck-666/xcodebuild.sh.git 如果好用记得给star,谢谢!
如脚本打包执行遇到问题可留言沟通!
‘肆’ iOS打包ipa方法(.app->.ipa)
注意: itunes里的“我的应用程序”是指电脑上的程序,不要求联机,可以把里面的app删除
不用打开XCODE编译运行即可实现打包
Xcode菜单栏->Proct->Archive->三选一,一般选后两个。
局限性:个人开发一般采用这种方法,但是当一个证书多人使用时就稍显麻烦。一般多人开发时都是采用衡腔明provisioning profile+P12文件来进行真机调试。上述方法在最后导出ipa包时需要输入appleID,这时还要向团队的其他人要。采用provisioning profile+P12真机调试的方式不要求开发者知道appleID以及密码,密码一般放在leader那里;
在xcode编译产生出.app包的基础上进行进一步处理,通过简单的压缩以及改后缀名即可实现ipa打包。
两种实现方式:脚本自动处理(推荐,一劳永逸)、手动处理。
Step1: 新建文件夹,命名为“distribute”,在其中新建distribute.sh脚本文件,内容为:(注意:下面所有appName都是你项目真正的名称)
Step2: 将要转化的.app文件放到distribute/文件夹下,目录结构为:
此时可能会提示 permission denied
执行 "chmod 777 distribute.sh"命令赋予权限
再执行一次distribute.sh,显示以下进度,完成。
Step1: 新建“Payload”文件夹,注意名字咐告要一字不差;
Step2: 将你的.app包放到Payload中,注意app的名字不做任何更改,就用xcode生成圆键的app名称;
Step3: 在Payload文件夹上右键压缩成zip,然后将生成的.zip文件后缀改成.ipa即可
‘伍’ xcode 创建脚本,打包时删除动态库的模拟机架构
ios8 之后, 苹果开放了动态库.也就是我们可以拍喊打包动态库, 但动态库如果上传到iTunes 是不能包含模拟机架构的. 所以就要求我们在打包时先删除模高悉拟机的架构.
可以添加一个run 脚本帮我袭念野们完成, 参考网址
下图就是脚本
Shell: /bin/sh
该脚本将查看你构建的应用程序的Frameworks文件夹~~ end
‘陆’ Xcode12 iOS SDK制作问题
近期打包SDK时突然发现以前的打包脚本不管用了,真机包和模拟器包无法合成,在终端使用 lipo -create 手动合成发现:
原因:Xcode12模拟器默认添加了arm64架构,真机禅氏包和模拟器包都包含了arm64架敬者构。
修改方法如下:
另外附上贺稿散打包脚本:
脚本使用:
‘柒’ Xcode使用Run Script脚本
由于某次上高手毁线,忘记修改Display Name,铸成大错。
Xcode可以使薯汪用脚本,在打包时修改Display Name、Bundle Id等信息。
一、在Build Phases添加脚本
1.2 自增长Build Number
二、在Scheme里添加脚本
在这里写可以不用写判断Debug或戚备Release模式
三、错误
可能会出现错误:
编译前clean一下,就可以解决了。
这是由于PRODUCT_BUNDLE_IDENTIFIER并没有改过来导致的。
所以在打包上传之前,需要clean一下。
参考资料:
‘捌’ iOS一键自动编译打包提交
在开始之前先唠叨两句自己对iOS自动化打包的接触,觉得没啥看头滴老铁可以略过直接从第二部分开始。项目自动打包提交的优势不用说了,很高效便捷的东西,很早就接触到了,但是一直没有用到项目中,分析一下主要有以下几个原因:
总结以上原因,一直没有用到自动打包技术。而现在的情况是,
基于以上的情况,所以想自己写一个自动打包的脚本,能够实现 只运行一句命令就自动编译打包发布 ,啥都不要做,挂着就行,打包完自动打开页面提醒。
打包所需要的文件已经挂在 Github 上了。只需要把 BuildTool 文件夹 复制 到 项目主目录 ,注意是复制!不是拖入项目主目录,因为苹果审核有屏蔽fir关键词。然后打开终端, cd 到 BuildTool 文件夹,输入 sh build.sh 命令,回车,开始执行此打包脚本。
具体的使用方法和参数配置 shell脚本 里面已经有非常详细的注释。
有 AppStoreExportOptions.plist 和 AdHocExportOptions.plist 两个plist文件,分别对应发布到AppStore和AdHoc(蒲公英、fir)。简单说一下里面的属性:
写完脚本后,发现已经有老铁对打包脚本做了很详细的分析了: 详解Shell脚本实现iOS自动化编译打包提交 。也有老铁早就写了iOS自动打包的脚本: xcode_shell 。
看了一下,功能也比较全,比如上传包到自己的服务器、上传完成发邮件测试人员。但是现在已经有第三方平台也做到了比这更多的功能,比如蒲公英,还可以手机短信通知测试人员,有专门的页面外链,支持持续集成等。
老铁们如果还有什么建议,欢迎在下面给我留言或私信。🤗 🤗 🤗
问题一(更新于2018年11月14日):
升级 Xcode 10 以上版本,苹果采用新的构建系统,之前的 xcodebuild clean 命令已经无法使用,如果用这个命令的话会报错,苹果给的建议是删除根目录下的 build 目录文件夹,删除就可以完整打包了。但是每次打包都需要再删除一遍,由于这个目录的主要作用就是存储 该项目的历史构建包(Archive归档文件和iPA包) ,所以解决办法是:
参考资料: build_system_release_notes_for_xcode_10
‘玖’ iOS如何打包支持真机+模拟器
xcode从12版本之后不再推荐大家将模拟器和真机的mach-o文件进行合并,因为他们有很大的区别,也占用大量的资源,更合理的做法是通过一种技术,让xcode自动切换真机和模拟器环境察茄的sdk包,xcode为我们带来了xcframework来处理键辩这个问题。简单来说,xcframework就是将不同架构的framework“合并”到一个(这里的合并不是真的合并,他们本质上还是两个framework),在具体的app打包之后又会只采用相应架构。
为了方便打包,我写了一个脚本,大家把下面的脚本,修改稿没缺下target_name后,放到framework项目根目录并执行,就可以在 dist 目录下发现打包好的xcframework,他的使用和framework完全一致!!
‘拾’ 一键实现多环境ipa打包以及链接下载全过程
2018年4月27日
一.jenkins实现不同环境用不同证书打包首燃 (这样uat,pro线上袭芹辩环境就可以用生产证书(ad-hoc)打包,测试极光推送等功能)
第一步.工程里面创建开发和生产拍缺的打包文件
生产的(主要是以下几个地方的区别)
第二步:需要用生产证书打包的,改成对应的pp文件,建议用release, 这样debug模式 uat和pro环境本机工程上还可以调试。(生产证书无法联机调试)
第三步:不同环境指定不同打包脚本 (注意shell if条件判断一定要有左右空格,if [ ${i} == "UAT”] 这样会有问题的),注意用release打包。
成功:
2017年6月1日
已修改脚本 支持最新版本xcode8.3
2016年10月23日
一.实现效果(一级目录和二级目录)
1.使用
a.直接运行脚本就可以
b.或者配置在jenkins上
如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。