实现iOS App的在线安装
一、App 打包,生成 plist 文件
? ? 1.打包---將.app包轉為.ipa包,其方法主要有四種:
? ? ?(1)Apple推薦的方式,即實用xcode的archive功能
? ? ? ?方法:Xcode菜單欄->Product->Archive->三選一,一般選后兩個。
? ? ?局限性:個人開發一般采用這種方法,但是當一個證書多人使用時就稍顯麻煩。一般多人開發時都是采用provisioning profile+P12文件來進行真機調試。上述方法在最后導出ipa包時需要輸入appleID,這時還要向團隊的其他人要。采用provisioning profile+P12真機調試的方式不要求開發者知道appleID以及密碼,密碼一般放在leader那里。
? ? ?(2)iTunes拖入
? ? ? ? itunes里的“我的應用程序”是指電腦上的程序,不要求聯機,可以把里面的app刪除,具體步驟請看動態圖:? ? ?(3)自動編譯腳本
? ? ? ??編寫一個全自動編譯腳本,從而不用打開XCODE編譯運行即可實現打包,方法和步驟如下:? ? ? ? ? ? A.所需語句(可直接在命令行中執行)
???????????xcodebuild -configuration Release???????
? ? ? ? ? ? 進入所在工程的根目錄文件夾,執行上面的語句,即可開始自動使用release模式build該工程文件。
? ? ? ? ? ?注意:文件必須添加證書。
? ? ? ? ? ??mkdir -p ipa/Payload
? ? ? ? ? ? cp -r ./Release-iphoneos/PRODUCT_NAME.app? ./ipa/Payload
? ? ? ? ? ? cd ipa
? ? ? ? ? ? zip -r $FILE_NAME *
? ? ? ? ?進入生成的app文件所在的文件夾,執行上面的語句,可將app文件打包為ipa文件。
? ? 注意:app文件可直接導入iTunes后直接運行,但是沒有icon,只需將icon放入./ipa文件夾一起打包即可。
? ? app文件默認生成路徑(可修改)
? ? Xcode3:所在工程根目錄/build/Debug-iphoneos/PRODUCT _NAME
? ??Xcode4:./user/USER_NAME/library/Developer/Xcode/DerivedData/
? ? PRODUCT_NAMERANDOM_STRING/Build/Products/ Debug-iphoneos/PRODUCT _NAME
? ? icon要求:不大于500*500,格式為jpg,命名為iTunesArtwork,不能有后綴。
? ? ? ? ??B. 腳本的寫法(mac/linux)
? ? ? ? ? ? ?腳本格式
???????????#!/bin/sh
???????????上面藍色的語句。?
???????????exit 0
???????????腳本創建方法
???????????打開終端
???????????vim FILE_NAME.sh
???????????按“i”進入編輯模式
???????????輸入腳本內容(可粘貼)
???????????按“Esc”退出編輯模式
???????????按“ZZ”(大寫)保存并退出
? ? ? ? ? ?關于權限:
? ? ?使用ls -l可以查看當前目錄下文件及文件夾的權限。?這里將權限改為777即可chmod 777 FILE_NAME?,然后重命名為.ipa,即:mv xx.zip xx.ipa。
?
? ? ? ? ?總上便是自動編譯腳本的過程,從中可以知道其缺點:不出錯還好,一旦有語法錯誤或者其他錯誤出現就不好處理。? ? ? ?(4)解壓改后綴名
? ? ? ? ?這種方式是在xcode編譯產生出.app包的基礎上進行進一步處理,通過簡單的壓縮以及該后綴名即可實現ipa發包。
? ? ? 這種方式下又可通過腳本自動處理以及手動處理兩種途徑實現,推薦腳本方法,一勞永逸。
? ? ??A.腳本自動生成ipa包
?
? ? ?Step1: 新建文件夾,命名為“distribute”,新建distribute.sh腳本文件,內容為:(注意,腳本中所有appName請先替換成你的真正app名稱).
rm -rf appNamemkdir appNamemkdir appName/Payloadcp -r appName.app appName/Payload/appName.appcp Icon.png appName/iTunesArtworkcd appNamezip -r appName.ipa Payload iTunesArtworkexit 0? ? ?? ? ? ? ?Step2: 將要轉化的.app文件放到distribute/文件夾下,這時的文件夾目錄結構是這樣的:
distribute/distribute.shdistribute/appName.app? ? ? ? ??Step3: 運行distribute.sh腳本
? ? ? ? ?打開Terminal,cd到distribute文件夾下,把distribute.sh拉到terminal中執行。如果提示permission denied,則用“chmod 777 distribute.sh”命令賦予權限后,再執行一次distribute.sh。
? ? ? ??Step4: 大約若干秒后,會在distribute/文件夾下生成appName/文件夾,里面的appName.ipa就是我們想要的包。
?
? ? ? ? ?B.手動壓縮改后綴方式,這種方式與4.1的方法本質是一樣的。
? ? ? Step1: 新建“Payload”文件夾,注意名字要一字不差;
? ? ? Step2: 將你的.app包放到Payload中,注意app的名字不做任何更改,就用xcode生成的app名稱;
? ? ? Step3: 在Payload文件夾上右鍵壓縮成zip,然后將生成的.zip文件后綴改成.ipa即可。
?
?
???2.生成plist文件
模板如下:?? <?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>items</key><array><dict><key>assets</key><array><dict><key>kind</key><string>software-package</string><key>url</key><string>http://172.17.22.124/test.ipa</string></dict></array><key>metadata</key><dict><key>bundle-identifier</key><string>com.sunli.test</string><key>bundle-version</key><string>1.1.0</string><key>kind</key><string>software</string><key>releaseNotes</key><string>1.1版本發布</string><key>title</key><string>testDemo</string></dict></dict></array> </dict> </plist>?
? ? ?url 中需要填寫你的 ipa 包下載地址
? ? ?bundle-identifier 填寫你打包時的 bundle id
? ? ?bundle-version 版本號
? ? ?reseaseNotes 發布信息
? ? ?title app名稱,下載時會彈出安裝提示,提示內容包含 title
二、啟動 apache 服務,配置 Https
??1. 啟動 Apache
?
? ? Mac OS X 自帶了 Apache 服務,我們只需要啟動它就可以了,在終端中輸入:
sudo apachectl start? ? 然后在瀏覽器中嘗試輸入http://127.0.0.1 , 如果出現 It Works!那么就是啟動成功。
? ? 站點的默認目錄是 /Library/WebServer/Documents/。
? ?2. 開啟 Https 服務
? ??因為 iOS7.1 以后, Apple 不再支持 HTTP 方式的 OTA ,所以需要為 Apache 開啟 HTTPS 服務。
? ? ? ? ?①. 制作 OpenSSL 證書
? ? ? ? ? ? 生成服務器私鑰
?
mkdir /private/etc/apache2/ssl cd /private/etc/apache2/sslsudo openssl genrsa -out server.key 1024?
? ? ?? 生成簽署申請
? ? 需要完整填寫各項信息,Common Name必須是服務器 ip 或域名,其他信息可以隨意填寫。
sudo openssl req -new -key server.key -out server.csr? ? ? ? ? ? 如果這一步漏填信息,可能會導致最后生成的 ca 文件是空的。
? ?生成 CA 私鑰
sudo openssl req ?-new -x509 -days 365 -key ca.key -out ca.crt? ?創建 demoCA
? ?在 ssl 目錄下創建 demoCA 文件夾,然后進入 demoCA ,創建一個 index.txt 和 serial ,index.txt 為空, serial 內容為01,然后再創建一個空文件夾 newcerts,然后執行命令。
? ? ? ? ?sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
? ? ? ?②. 配置 SSL 服務
? ? ??A.?編輯 httpd.conf 文件
sudo vim /private/etc/apache2/httpd.conf? ? ? ? ? ?把以下三行代碼前頭的注釋去掉
LoadModule ssl_module libexec/apache2/mod_ssl.soInclude /private/etc/apache2/extra/httpd-ssl.confInclude /private/etc/apache2/extra/httpd-vhosts.conf? ? ? ? ? 注意:如果你的 httpd.conf 中缺少了某行,你可以自行添加進去即可(我的 httpd.conf 中就沒有后面兩行,自己加上去的)。
? ?B.編輯 httpd-ssl.conf 文件
? ?sudo vim /private/etc/apache2/extra/httpd-ssl.conf
? ?把以下兩行代碼的注釋去掉
SSLCertificateFile "/private/etc/apache2/server.crt"SSLCertificateKeyFile "/private/etc/apache2/server.key"? ? ? 全文搜索是要注意,可能它的路徑和我貼的不一致,然后修改路徑,改成你的證書文件路徑。
SSLCertificateFile "/private/etc/apache2/ssl/server.crt"SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"? ? ?C.編輯 httpd-vhosts.conf 文件
sudo vim /private/etc/apache2/extra/httpd-vhosts.conf? ? ? 在 NameVirtualHost *:80 后面添加
NameVirtualHost *:443? ? ? 然后在文件末尾添加
<VirtualHost *:443> SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULLSSLCertificateFile /private/etc/apache2/ssl/server.crtSSLCertificateKeyFile /private/etc/apache2/ssl/server.keyServerName 172.17.22.124DocumentRoot "/Library/WebServer/Documents/" </VirtualHost>? ? ? ?ServerName 填寫你的 ip
? ? ? ?DocumentRoot 填寫你的站點路徑
? ? ?D.檢查 apachectl 配置
? ??sudo apachectl configtest
? ? ? ?如果它提示:Syntax OK ,那就完成90%了,如果它提示有錯,那就要根據錯誤提示自行解決了。
? ? ??E.重啟 Apache 服務
? ? ? ?sudo apachectl restart
? ? ? ?這樣就可以用 https 訪問本地服務器了
三、建立在線安裝服務
? ? ? ?跳轉到你的站點目錄,我是 /Library/WebServer/Documents/
cd /Library/WebServer/Documents/? ? ? ?然后把 plist 文件,ipa 包,還有前面生成在 ssl 目錄中的 ca.crt 文件都拖到站點目錄中,然后新建網頁
sudo vim index.html? ? ? ?輸入以下內容
<html> <body> <a href="itms-services://?action=download-manifest&url=https://172.17.22.124/test.plist" class="app_link">click to install app</a> <br><br> <a title="iPhone" href="http://172.17.22.124/ca.crt">ssl install</a> </body> </html>? ? ? ?url中必須填寫 https 開頭的 ipa 包下載地址,然后下載前需要安裝 ssl 證書,所以第二行附上 ca.crt 證書的下載地址。
? ? ? 最后在 iphone 的 Safari 瀏覽器中輸入地址http://172.17.22.124/index.html 或者https://172.17.22.124/index.html
? ? ? 先安裝證書,再安裝 app,便大功告成!
總結
以上是生活随笔為你收集整理的实现iOS App的在线安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python:matplotlib绘图
- 下一篇: iOS之单例模式的写法