你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS In House方式發布

iOS In House方式發布

編輯:IOS開發綜合

這兩天In House簽名的時候,提示SSL證書過期了。又折騰了一把iOS In House方式發布。這裡開一篇文章記錄一下過去折騰In House的經過,未來再修改也更新在這裡。

最早在12年的時候,我們寫了一個重簽名的shell腳本

 

IPA="xxx.ipa"
APPNAME="xxx.app"
PROVISION="embedded.mobileprovision"
CERTIFICATE="xxx" #must be in keychain, such as"iPhone Distribution: Tencent Co.,Ltd"

rm -rf Payload
rm -rf resigned.ipa

unzip -q "$IPA"

# remove the signature
rm -rf Payload/*.app/_CodeSignature Payload/*.app/CodeResources

# replace the provision
rm -rf Payload/*.app/embedded.mobileprovision
cp "$PROVISION" Payload/$APPNAME/embedded.mobileprovision

# sign with the new certificate
/usr/bin/codesign -f -s "$CERTIFICATE" --resource-rules Payload/*.app/ResourceRules.plist --entitlements game.plist Payload/*.app

# zip it back up
zip -qr resigned.ipa Payload
rm -rf Payload

中間隨著iOS版本升級和XCode升級,間或小修改細節。每次XCode升級,必須下載安裝對應的command line tools

 

iOS 7.1更新之後,蘋果做了一個大的調整,通過Safari安裝的時候,會提示“無法安裝應用程序 因為證書無效”。stackoverflow上看到必須把plist放到https服務器上,最簡單的就是丟到dropbox之類的雲存儲上,但是國內訪問可能會受限制。我就在我們內網服務器(apache)上自己生成了一下ssl證書,讓服務器支持https訪問,下面是詳細步驟。

1. 加載ssl動態庫;打開conf/httpd.conf,去掉LoadModule ssl_module modules/mod_ssl.so前的注釋即可;

2. 配置ssl;打開httpd-ssl.conf,我的配置示例如下:

 

SSLSessionCache "shmcb:logs/ssl.scache(512000)"
Listen 442 #端口,為了防止端口沖突,我改成了442

    # General setup for the virtual host
    DocumentRoot "D:/programs/xampp-win32-1.8.1-VC9/htdocs"#服務器根目錄
    ServerName 192.168.1.221#服務器名,必須是ip地址或域名
    ServerAdmin webmaster@localhost#這個是郵箱地址,可以隨意填
    ErrorLog "logs/error.log"
    
        CustomLog "logs/access.log" combined
    
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"#之後生成的證書的路徑
    SSLCertificateKeyFile "conf/ssl.key/server.key"#之後生成的密鑰的路徑

 

3. 打開cmd,到.../apache/bin目錄,運行以下命令生成服務器的私鑰

 

openssl genrsa -out server.key 1024

4. 生成簽署申請,Common Name必須是服務器ip或域名,其余都可以為空

 

openssl req -new -out server.csr -key server.key -config ..\conf\httpd-ssl.cnf

5. 生成CA私鑰

 

openssl genrsa -out ca.key 1024

 

6. 生成CA證書,Common Name必須是服務器ip或域名,其余都可以為空;為免過期,有效期我設為了10年

 

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -config ..\conf\httpd-ssl.cnf
7. 在當前目錄創建目錄demoCA,在裡面創建1. 空目錄newcerts,2. 空文件index.txt, 3,文件serial,用文本編輯器打開,填01;

 

8. 用CA為服務器簽署證書

 

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf
9. 將server.crt復制到目錄conf/ssl.crt/,將server.key復制到目錄conf/ssl.key/。

 

10. 重啟apache,然後可以在浏覽器輸入https://localhost:442測試。

11. 修改html文件中的plist鏈接

 

itms-services://?action=download-manifest&url=https://192.168.1.221:442/down/dev/xxx.plist
然後,應該就可以在手機浏覽器上在線安裝了。

 

 

update 2014.12.24

中間有一段時間我沒有做過In House發布,此間我的Mac升級到了10.10,Xcode升級到了6.1.1。前天簽名的時候提示“--resource-rules has been deprecated in max os x >= 10.10”,簽完名放到服務器上,在線安裝的時候,最後一刻提示“無法下載應用程序 此時無法安裝xxx”。

\

在簽名的腳本裡把--resource-rules那裡注釋掉也不行。後來在stackoverflow上看到如下的解決方案,經過測試是可以的:

點工程 > Targets > Select your target > Build Settings > Code Signing Resource Rules Path

添加 $(SDKROOT)/ResourceRules.plist

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved