Xcode 無證書編譯蕊梧、越獄真機(jī)調(diào)試霞赫、越獄ipa打包(企業(yè)簽/重簽)

一、說明

首先要明確肥矢,無論是越獄真機(jī)調(diào)試還是越獄 ipa 打包端衰,都是需要進(jìn)行代碼簽名的,唯一的區(qū)別是使用蘋果簽發(fā)的證書或者自簽名證書進(jìn)行代碼簽名橄抹。

可配置 Xcode 支持無證書編譯靴迫,但是如果不簽名,就算是越獄機(jī)器也會提示:無法安裝此App楼誓,因?yàn)闊o法驗(yàn)證其完整性玉锌。

  1. 真機(jī)調(diào)試流程:
  • 用 Xcode 進(jìn)行無證書編譯;
  • 編譯完成疟羹,用自簽名證書進(jìn)行代碼簽名主守;
  • Xcode 連接越獄真機(jī)調(diào)試;
  1. 越獄 ipa 打包(企業(yè)簽)流程:
  • 用 Xcode 進(jìn)行無證書編譯榄融;
  • 編譯完成参淫,用自簽名證書對 .xcarchive 進(jìn)行代碼簽名;
  • .xcarchive 打包成 ipa 文件愧杯;

二涎才、準(zhǔn)備

  1. 越獄成功的蘋果手機(jī)或者iPad等設(shè)備;
  2. 越獄設(shè)備必須安裝 AppSync 插件力九,該插件繞過 iOS 系統(tǒng)的簽名驗(yàn)證耍铜,使自簽名 app 可以正常運(yùn)行;
  3. 使用 鑰匙串訪問 創(chuàng)建自簽名證書跌前;
  4. 環(huán)境:macOS14.6.1 + Xcode16.2

三棕兼、Xcode 無證書編譯

1. Xcode 配置

修改以下配置文件,版本不同路徑有區(qū)別抵乓。使用 Xcode 修改伴挚,注意權(quán)限問題靶衍。

vi /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.2.sdk/SDKSettings.plist
DefaultProperties.ENTITLEMENTS_REQUIRED = NO
DefaultProperties.CODE_SIGNING_REQUIRED = NO

vi /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist
DefaultProperties.CODE_SIGN_CONTEXT_CLASS = XCCodeSignContext

2. Xcode 工程編譯設(shè)置

選主 TARGERT 點(diǎn)擊 Build Settings,點(diǎn)左上“+”號:Add User-Defined Setting

CODE_SIGNING_ALLOWED = NO

可在自動編譯 C# 源碼添加:

proj.AddBuildProperty("Unity-iPhone", "CODE_SIGNING_ALLOWED", "NO");

四茎芋、越獄真機(jī)調(diào)試

1. Xcdoe 設(shè)置

主 TARGERT 添加 Build Phases/Run Script颅眶,給 app 和 framework 進(jìn)行簽名:

if [ "${CODE_SIGNING_ALLOWED}" == "NO" ]; then
    cd "${PROJECT_DIR}/../iOSBuild"
    sh XcodeSigning.sh "${PRODUCT_BUNDLE_IDENTIFIER}" "${PROVISIONING_PROFILE}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
    sh XcodeSigning.sh "${PRODUCT_BUNDLE_IDENTIFIER}" "${PROVISIONING_PROFILE}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Frameworks/UnityFramework.framework/"
fi

可在自動編譯 C# 源碼添加:

proj.AddShellScriptBuildPhase("Unity-iPhone", "Run Script", "", "<同以上腳本>");

XcodeSigning.sh 腳本貼在最后。

2. 調(diào)試

連上越獄真機(jī)败徊,即可正常編譯調(diào)試帚呼。

五、越獄 ipa 打包

1. 編譯

先編譯出 .xcarchive 包皱蹦;

2. 打包

使用腳本進(jìn)行打包煤杀,BuildIPA.sh 腳本貼在最后。

sh BuildIPA.sh <path_to>.xcarchive/Products/Applications/<your_app>.app/

3. 重簽

腳本支持重簽沪哺,可改成從 .mobileprovision 文件中讀取生成 entitlements.plist 文件:

/usr/libexec/PlistBuddy -x -c "print:Entitlements" /dev/stdin <<< $(security cms -D -i "${PROVISION}") > entitlements.plist

六沈自、附:腳本

XcodeSigning.sh

#!/bin/bash

APP_ID="$1"
APP_CERT="$2"
APP_TARGET="$3"
TEAM_ID="$4"
if [ "$TEAM_ID" == "" ]; then
    TEAM_ID="team"
fi

if [ "$APP_ID" == "" ] || [ "$APP_CERT" == "" ] || [ "$APP_TARGET" == "" ] || [ "$TEAM_ID" == "" ]; then
    echo "Usage: $(basename $0) APP_ID APP_CERT APP_TARGET [TEAM_ID]"
    echo "       $(basename $0) "'"${PRODUCT_BUNDLE_IDENTIFIER}" "${PROVISIONING_PROFILE}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"'
    exit 1
fi

echo "Gen entitlements plist file..."
ENT_PLIST="$(mktemp)"
cat > $ENT_PLIST <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>application-identifier</key>
        <string>${TEAM_ID}.${APP_ID}</string>
        <key>aps-environment</key>
        <string>production</string>
        <key>com.apple.developer.associated-domains</key>
        <string>*</string>
        <key>com.apple.developer.team-identifier</key>
        <string>${TEAM_ID}</string>
        <key>com.apple.security.application-groups</key>
        <array>
                <string>group.${APP_ID}.appshortcallid</string>
                <string>group.${APP_ID}.appcallid</string>
        </array>
        <key>get-task-allow</key>
        <true/>
        <key>keychain-access-groups</key>
        <array>
                <string>${TEAM_ID}.*</string>
                <string>com.apple.token</string>
        </array>
</dict>
</plist>
EOF

echo "Code signing..."
set -x
codesign -f -s "$APP_CERT" --entitlements $ENT_PLIST "${APP_TARGET}" || exit $?

BuildIPA.sh

#!/bin/bash

APP_ID="com.team.app"
APP_CERT="test"
TEAM_ID="team"

if [ "$1" == "" ]; then
    echo "Usage: $(basename $0) <path_to>.xcarchive/Products/Applications/<your_app>.app/"
    exit 1
fi

APP_PATH=${1/.app\//.app}
APP_NAME=$(basename "$APP_PATH")
APP_NAME="${APP_NAME%.*}"
APP_TARGET="Payload/${APP_NAME}.app"
echo "App name: ${APP_NAME}"

echo "Copy app files..."
rm -rf Payload || exit $?
mkdir -p Payload || exit $?
rsync -a "$APP_PATH" Payload || exit $?

# signing
sh XcodeSigning.sh "$APP_ID" "$APP_CERT" "$APP_TARGET" "$TEAM_ID" || exit $?
sh XcodeSigning.sh "$APP_ID" "$APP_CERT" "$APP_TARGET/Frameworks/UnityFramework.framework" "$TEAM_ID" || exit $?

echo "Packaging..."
zip -rq "${APP_NAME}.ipa" Payload || exit $?
echo "Done: ${APP_NAME}.ipa"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辜妓,隨后出現(xiàn)的幾起案子枯途,更是在濱河造成了極大的恐慌,老刑警劉巖籍滴,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酪夷,死亡現(xiàn)場離奇詭異,居然都是意外死亡孽惰,警方通過查閱死者的電腦和手機(jī)晚岭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勋功,“玉大人坦报,你說我怎么就攤上這事】裥” “怎么了片择?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骚揍。 經(jīng)常有香客問我字管,道長,這世上最難降的妖魔是什么信不? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任纤掸,我火速辦了婚禮,結(jié)果婚禮上浑塞,老公的妹妹穿的比我還像新娘。我一直安慰自己政己,他們只是感情好酌壕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布掏愁。 她就那樣靜靜地躺著,像睡著了一般卵牍。 火紅的嫁衣襯著肌膚如雪果港。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天糊昙,我揣著相機(jī)與錄音辛掠,去河邊找鬼。 笑死释牺,一個胖子當(dāng)著我的面吹牛萝衩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播没咙,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猩谊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了祭刚?” 一聲冷哼從身側(cè)響起牌捷,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涡驮,沒想到半個月后暗甥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捉捅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年撤防,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锯梁。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡即碗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陌凳,到底是詐尸還是另有隱情剥懒,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布合敦,位于F島的核電站初橘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏充岛。R本人自食惡果不足惜保檐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崔梗。 院中可真熱鬧夜只,春花似錦、人聲如沸蒜魄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旅挤,卻和暖如春踢关,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粘茄。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工签舞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柒瓣。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓儒搭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嘹朗。 傳聞我的和親對象是個殘疾皇子师妙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容