IOS 打包、安裝、重簽名 .app & .ipa
阿新 • • 發佈:2019-01-05
打包與簽名方法
- 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 resourcesClick 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 重簽名方法
- ORIGINAL_FILE=”$1” 待簽名的ipa包
- CERTIFICATE=”$2” 證書名稱
- MOBILEPROVISION=”$3” 對應的描述檔案
- BUNDLE_ID=”$4” app的BundleID, 如果你的描述檔案允許你修改任意BundleID那麼可以任意填寫,否則就老老實實的把原BundleID寫上吧
- 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