IOS 打包、安装、重签名 .app & .ipa

打包与签名方法

  • Xcode 工具可以直接打包,不累赘;
  • xcrun 命令打包:
    1,清理:
    /usr/bin/xcodebuild -target targetName clean
    2,编译:
    /usr/bin/xcodebuild -target targetName
    3,第三步打包:
    /usr/bin/xcrun -sdk iphoneos PackageApplication -v path/xxx.app -o ./xxx.ipa
    说明:
    xcodebuild负责将工程源文件编译成xxx.app
    xcrun负责给xxx.app(签名并)打包成xxx.ipa
    关于xcrun,直接打包的参数就是 xcrun -sdk iphoneos PackageApplication -v 源app路径 -o 输出的ipa路径,以上两个命令必需在xxx.xcodeproj所在的目录执行。

    下面两个命令都可以为应用签名:

xcodebuild -target targetName CODE_SIGN_IDENTITY="iPhone Distribution:XXXXXX"
xcrun -sdk iphoneos PackageApplication -v 源app路径 -o 输出的ipa路径 --sign "iPhone Distribution:XXXXXX"

证书与描述文件放在build.xcconfig时配置运行:
xcodebuild -configuration Debug clean build -xcconfig path/build.xcconfig

CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist
CODE_SIGN_IDENTITY = iPhone Developer:xxxx
CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer: xxx
PROVISIONING_PROFIEL =xxx.mobileprovision
PROVISIONING_PROFIEL[sdk=iphoneos*]=xxx.mobileprovision
SYMROOT =/Users/iosTest/xxx
OBJROOT =/Users/iosTest/xxx

常见error:

.app/ResourceRules.plist: cannot read resources

Click on your project > Targets > Select your target > Build Settings >Code Signing Resource Rules Path
and add :
$(SDKROOT)/ResourceRules.plist

#sh:
echo 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist' >> ./build.xcconfig

安装 .ipa||.app 方法

  • Xcode 、iTunes、助手等工具不累赘
  • ideviceinstaller:
    $ideviceinstaller -u 076dbbea77c1 -i xx.app/ || XX.ipa
  • fruitstrap(appium包支持):
    fruitstrap install –id userid –bundle “/Users/shop.app”

.ipa 重签名方法

  1. ORIGINAL_FILE=”$1” 待签名的ipa包
  2. CERTIFICATE=”$2” 证书名称
  3. MOBILEPROVISION=”$3” 对应的描述文件
  4. BUNDLE_ID=”$4” app的BundleID, 如果你的描述文件允许你修改任意BundleID那么可以任意填写,否则就老老实实的把原BundleID写上吧
  5. PASSWD=”$5” 当前用户所对于的密码
# !/bin/bash 
# 
# Sample: 
#  sh resign.sh  80000.ipa "iPhone Developer: Jsz autotest (xxoo)" Dev_xxoo_iphone.mobileprovision "com.xxoo.iphone" "7766"
# 
ORIGINAL_FILE="$1"
CERTIFICATE="$2"
MOBILEPROVISION="$3" 
BUNDLE_ID="$4" 
PASSWD="$5"

function unzip_IPA() 
{ 
 ipa="$ORIGINAL_FILE" 
 unzip -o "$ipa" 
} 

function create_EntitlementsPlist() 
{   
 /usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i ${MOBILEPROVISION}) > entitlements.plist  
 SN_CODE=$(/usr/libexec/PlistBuddy -c "Print :com.apple.developer.team-identifier" entitlements.plist) 
 /usr/libexec/PlistBuddy -c "Set :application-identifier ${SN_CODE}.${BUNDLE_ID}" entitlements.plist 
} 

function set_BundleID() 
{ 
 /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $BUNDLE_ID" Payload/*.app/Info.plist 
} 

function del_OldCodeSign() 
{ 
 rm -r Payload/*.app/_CodeSignature/ 
} 

function copy_EmbeddedProvision() 
{ 
 cp $MOBILEPROVISION Payload/*.app/embedded.mobileprovision 
} 
function reSignFrameworks()
{
 echo "Resigning with certificate: $CERTIFICATE" >&2
find  −name"∗.app"−o−name"∗.appex"−o−name"∗.framework"−o−name"∗.dylib" > directories.txt

 while IFS='' read -r line || [[ -n "$line" ]]; do
/usr/bin/codesign --continue -f -s "$CERTIFICATE" --no-strict "t_entitlements.plist"  "$line"
done < directories.txt
}
function reSign() 
{ 
 codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/ 
} 

function rezip_IPA() 
{ 
 original_IPA=`basename "$ORIGINAL_FILE"` 
 re_IPA=`echo ${original_IPA/.ipa/-resigned.ipa}` 
 zip -qr "$re_IPA" Payload/ 
} 

security unlock-keychain -p "$PASSWD" ~/Library/Keychains/login.keychain 

unzip_IPA 
create_EntitlementsPlist 
set_BundleID 
del_OldCodeSign 
copy_EmbeddedProvision
reSignFrameworks 
reSign 
rezip_IPA

“持续集成”配置参考链接:
http://blog.devtang.com/blog/2012/02/16/apply-daily-build-in-ios-project/

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_金手指

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值