资讯专栏INFORMATION COLUMN

iOS自动打包+更换签名脚本

idisfkj / 2330人阅读

摘要:前两天看到写的下如何自动化打包就想自己实践下。尤其是感谢同学,他的这篇文章用命令行打包,已经把自动打包所需要的脚本写的很详细了。下文,只是介绍了下基本流程,以及详细的脚本。

前两天看到@lzwjava写的iOS 下如何自动化打包 App.就想自己实践下。

尤其是感谢victorchee同学,他的这篇文章用命令行打AdHoc包,已经把自动打包所需要的脚本写的很详细了。我这边的脚本基本是按照他的脚本抄下来的。

下文,只是介绍了下基本流程,以及详细的脚本。

基本流程 1 设置打包需要的根证书,以及profile的UUID

根证书:只需要从钥匙串中找到相应的证书,将其常用名称copy出来即可[范例:iPhone Distribution: ()]

profile的UUID:需要使用plistbuddy来解析profile文件,并获取其中的UUID

2 使用xcodebuild设置证书+签名信息,并进行build生成APP文件

xcodebuild 可以编译 Xcode 工程中包含的一个或多个 targets,或者编译 Xcode workspace 或 Xcode project 中包含的 scheme。

xcodebuild [-project projectname] [-target targetname ...] [-configuration configurationname]
                [-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...]
                [-userdefault=value ...]
     xcodebuild [-project projectname] -scheme schemename [-destination destinationspecifier]
                [-destination-timeout value] [-configuration configurationname]
                [-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...]
                [-userdefault=value ...]
     xcodebuild -workspace workspacename -scheme schemename [-destination destinationspecifier]
                [-destination-timeout value] [-configuration configurationname]
                [-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...]
                [-userdefault=value ...]
     xcodebuild -version [-sdk [sdkfullpath | sdkname]] [infoitem]
     xcodebuild -showsdks
     xcodebuild -list [-project projectname | -workspace workspacename]
     xcodebuild -exportArchive -exportFormat format -archivePath xcarchivepath -exportPath destinationpath
                [-exportProvisioningProfile profilename] [-exportSigningIdentity identityname]
                [-exportInstallerIdentity identityname]

xcodebuild 详细使用可参考xcodebuild 命令详解

3 使用xcrun进行签名,并导出ipa包

xcrun 详细使用可参考xcrun 命令详解

具体脚本

下面脚本在我本地已经可以正常运行,如有同学使用,需要相应修改下部分参数名称,例如:路径,工程名等。(我下面省略了pod步骤,有同学需要,则相应增加即可。)

# 设置 开发,或者发布的根证书全名
Code_Sign_Identity="iPhone Distribution: **** (****)"
# 获取 provision profile 文件的UUID 注意,修改后面的证书地址【这个文件,必须与你当前安装的证书一致,可以直接从xcode的证书目录copy到你当前的目录】
App_Profile_UUID=`/usr/libexec/plistbuddy -c Print:UUID /dev/stdin <<<  `security cms -D -i ./iOS_BaiCaiO_AdHoc.mobileprovision`` 
echo $App_Profile_UUID

#一些路径的切换:切换到你的工程文件目录
cd .. && 
cd baicaio &&

# 设置项目内的Build Version,增1 
Project_Plist=baicaio/Info.plist
Project_Build_Version=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${Project_Plist})
Fixed_Project_Build_Version=$(expr $Project_Build_Version + 1)
# 生成后,项目导出到哪里
Path="/Users/Eric/Desktop/baicaio"
# 项目名称,xworkspace会用到这个名字
Project_Name="baicaio"
# 工程文件名
Project_Path="$Project_Name.xcodeproj"
# 当前是发布,还是开发,或者是你自定义的
Configuration="AdHoc"
# 是什么平台,iOS的统一是iphonesos
SDK="iphoneos"
# xcode顶部菜单栏的Scheme名称,标明当前我要运行哪个scheme
Scheme="baicaio"

# 将文件的plist 的build版本号加一,并设置到plist文件中
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $Fixed_Project_Build_Version" ${Project_Plist} && 
# 运行前先clear下项目
xcodebuild clean -workspace $Project_Name.xcworkspace -scheme $Scheme -configuration $Configuration && 

# Pod 操作
# pod update

# 进行build,注意APP_PROFILE这个参数,是修改了工程文件buildsetting里面的Provisioning profile里面你设置的对应的configuration的证书为:$APP_PROFILE 才可以这么使用【注意我这个是xcworkspace的,如果有些同学是project文件,请直接使用-project $Project_path,相应进行修改】
xcodebuild -workspace $Project_Name.xcworkspace -scheme $Scheme -configuration $Configuration -sdk $SDK CODE_SIGN_IDENTITY="$Code_Sign_Identity" APP_PROFILE="$App_Profile_UUID" build && 

# 声明Build的目录,注意,我这个build文件在这里是因为我改了Xcode里面的Locations的Derived Data:点击advanced,设置Build Location设置为Custom:Relative to Workspace
Build_Directory="Build/Products"
# Build App文件
Build_Path="$Build_Directory/AdHoc-iphoneos/$Project_Name.app"
# app文件中Info.plist文件路径
App_Infoplist_Path=${Build_Path}/Info.plist
# 取版本号
Version=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${App_Infoplist_Path})
# 取build值
BuildVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${App_Infoplist_Path})
# 取displayName
DisplayName=$(/usr/libexec/PlistBuddy -c "print CFBundleName" ${App_Infoplist_Path})
# IPA名称
IPA_Name="${DisplayName}_${Version}(${BuildVersion})_$(date +"%Y%m%d")"
# 导出IPA文件
Export_Path="$Path/$IPA_Name.ipa"

#进行签名,打成ipa包,并导出
/usr/bin/xcrun -sdk $SDK PackageApplication -v "$Build_Path" -o "$Export_Path" && 

rm -rf $Build_Directory && 
# 将生成的文件,上传到fir分发网站 -T:后面的是api的token,验证你的身份。使用这个之前,必须先安装fir的命令行工具: $ sudo gem install fir-cli --no-ri --no-rdoc
fir p $Export_Path -T 234sdfasd9sdfo239s

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16095.html

相关文章

  • tweak

    摘要:会在目标程序启动时,会根据指定的规则检查指定目录是否存在第三方库,如果有,则会通过修改二进制的,来把自己注入进所有的当中,然后加载第三方库。 前言 cycript注入 cycript注入动态库的方式,这必须要在越狱环境下才能实现。 cycript的原理是动态库注入,但是其动态库注入的原理,与我们常见的通过LC_LOAD_DYLIB在可执行文件中注入动态库不同. cycript的操作是 ...

    _Suqin 评论0 收藏0
  • 用 Electron 打造 Win/Mac 应用,从「代码」到可下载的「安装包」,可能比你想得麻烦一

    摘要:三配置环节目的一是为之后的环节初始化工作流参数,二是准备好应用文件夹内容即要打包的目标文件夹做的事解析命令行参数,初始化工作参数,填充配置文件,把配置文件和相关依赖文件导入到文件夹内合适的 首发于酷家乐前端博客,作者@摘星(segmentfault @StinsonZhao) 我们能从很多地方学习到怎么起一个 Electron 项目,有些还会介绍怎么打包或构建你的代码,但距离「真正地...

    LdhAndroid 评论0 收藏0
  • Hyperledger Fabric on SAP Cloud Platform

    摘要:在她的帮助下,原型发布顺利完成。节点收到一个交易后,会根据判断标准对该交易进行有效性校验,无效的交易会被废弃。负责权限管理,成员身份相关证书管理和维护交易相关证书管理等等。 今天的文章来自Wen Aviva, 坐Jerry面对面的程序媛。 Jerry在之前的公众号文章《在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图》已经介绍过Aviva了,SAP成都C4C开发团...

    codergarden 评论0 收藏0
  • Android 多渠道打包原理和使用

    摘要:这篇文章咱们就和做安卓开发的同学聊一下安卓多渠道打包的事情。这里推荐大家看一下友盟开源的一个多渠道打包工具中有相关的实现细。 每次中午吃饭总会和技术同学聊天。当做 iOS 开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS 开发难还是安卓开发难。 这个时候做安卓开发的同学最激动说安卓开发要自己画界面、机型复杂、操作系统多 rom 又被各家改的四不像....开发一个安卓 ...

    liujs 评论0 收藏0
  • [分享]iOS开发-Xcode打包ipa的基本步骤

    摘要:注册账号之后,可以去苹果的开发者中心管理账号,证书,等等。在中无证书打包,上传到指定工作室网站,淘宝上现在一大堆打包服务的,由别人用他们的账号签名。 确保电脑联网,不然干什么都是扯淡!! 1、关于Apple ID很简单,任何人只要跟苹果设备打交道,必须要有Apple ID。要想打包ipa,同样也必须要有Apple ID,没有的自己注册去。 下面为在Xcode中添加Apple ID作为...

    whjin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<