zoukankan      html  css  js  c++  java
  • iOS多应用自动打包

    多应用自动打包

    前言

    网上很多文章都是陈词滥调,老黄历啦,在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
  • 相关阅读:
    Python基础5_字典,集合
    Python基础3_基本数据类型,字符串,for循环
    Python基础2_while循环,格式化输出,基本运算符,编码,
    Python基础1_初识,注释,变量,if语句
    编写高质量代码[读书笔记]
    php地方天气
    [head first php&mysql]读书笔记-基本的安全信息(第五章)
    上传本地图片
    检测IE
    underscore源码解析(实用的功能)
  • 原文地址:https://www.cnblogs.com/tangjuanj/p/6720017.html
Copyright © 2011-2022 走看看