iOS應用自動推送的方法研究與實踐
本文作者:系統支援部 霍曉楠
摘要
一、研究背景
公司版證照:屬於“組織”類別,功能用途與個人版證照一致,允許多個開發者協作開發,只能用於將應用釋出至蘋果App Store。 企業版證照:屬於“組織”類別,允許多個開發者協作開發,只能用於將應用釋出至企業內部使用。
二、技術術語
預處理(Pre-process),把宏替換,刪除註釋資訊,將標頭檔案進行展開,產生.i檔案。 編譯(Compliling),把.i檔案轉換成組合語言產生.s檔案。 彙編(Asembly),將.s檔案轉換成機器編碼檔案,產生.o檔案。 連結(Link),對.o檔案中的所提到的的庫檔案進行引用(包括多個.o檔案進行link),生成最後的可執行檔案。
Objective-C:是擴充C的物件導向程式語言,它是一個用C寫成很小的執行庫,令應用程式尺寸增加很小,完全相容C語言,可以使用GCC和Clang執行的系統上進行編譯,目前研發中心主要使用該語言進行開發。 Swift:於2014年WWDC釋出的新開發語言,可與Objective-C共同執行於Mac OS和iOS平臺,為了使Swift語言易用性和功能性更加出色,蘋果公司也在不斷的對編譯器進行最佳化和改進。以目前最新版本Xcode7版本為例,使用LLVM7.1(Xcode7.3)編譯器,該編譯器是自Xcode5將GCC編譯器取消後一直使用的,LLVM編譯器的前端是Clang,支援C、C++、Objective-C和Objective-C++等程式語言。 JavaScript:該指令碼語言是蘋果公司在iOS7之後推出的基於JavaScriptCore.framework框架的開發方式,實現Objective-C與Javascript相互呼叫並傳參的方法,使用此框架可以在iOS應用中執行JavaScript指令碼,也就是HybirdApp混合模式移動應用,即其中包含原生的結構有內嵌有web元件,這種App不僅效能和使用者體驗可以達到和原生所差無幾的程度,更大的優勢在於bug修復快,版本迭代無需重新編譯釋出,目前研發中心越來越多的專案開始採用此種開發模式。
證照(Certificates):蘋果官方頒佈的證照,分為開發證照和釋出證照兩種,蘋果是釋出者,然後安裝,這個證照的Mac就是擁有者。蘋果就會給電腦授予這個證照所對應的權利,簡單來說,證照是iOS應用開發的基礎,也是構建的必要組成部分。 專案標識(Identifiers):Identifiers即“識別符號”,約等於是專案的身份證,用於區別蘋果應用,每個應用都有各自唯一的識別符號,專案標識包括:App ID其實就是一個App的身份證,一個App的位置標識。在Project中稱為Bundle ID。在Member Center、Project、ITunes Connect都是需要此ID去標識APP的唯一性。Bundle ID在不同環境下的表現關係,如下圖所示:
裝置(Devices):Devices作用為建立測試裝置,只有在此列表中的裝置才能安裝真機除錯階段的蘋果應用,未在該列表中的裝置則不能安裝,一般情況下該列表中裝置總數不能超過100個。 配置概要檔案(Provisioning Profiles):配置概要檔案是很有蘋果特點的設定,該檔案將證照(Certificates) 、專案標識(Identifiers)、裝置(Devices)結合起來,形成一個描述證照、識別符號的描述檔案。透過Xcode編譯的過程將配置概要檔案與程式關聯起來從而形成待發布蘋果App。
三、問題描述
第一部分是將待投產的程式包上傳至蘋果伺服器進行程式及配置檔案的自動掃描,主要在程式碼層面進行檢查。 第二部分是在機器掃描透過後進行應用市場釋出的最後檢測,主要針對程式的功能和效能進行人為測試。
一種是透過開發工具Xcode在手動完成構建後直接透過介面上傳至蘋果商店。 第二種是透過Xcode中自帶的上傳工具Application Loader進行上傳,雖然介面不同,但其最終上傳介面和程式碼沒有本質區別。
四、解決方案
一種是釋出至蘋果商店對客進行下載,這種專案需要釋出至蘋果商店供蘋果裝置客戶進行下載。 第二種是企業內部需求直接在企業內部發放使用的應用。
project_path=/Users/abc/ipa
project_name=AutoDeployTest
scheme_name=ABCDeploy
development_mode=Release
build_path=${project_path}/build
exportOptionsPlistPath=${project_path}/ExportOptions.plist
exportIpaPath=${project_path}/ABCDir/${development_mode}
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u 123 -p 123 ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u 123 -p 123 ios --output-format xml
# The Deliverfile allows you to store various iTunes Connect metadata
# For more information, check out the docs
#
# 根據iTunes Store 資訊設定
username "123" # Apple ID email address
app_identifier("com.abc.test") # bundle identifier
#ipa("/Users/abc/ipa/ABCDeploy.ipa") # 沒有這個選項,只有metadata會被上傳
copyright("版權資訊") #版權資訊
#submit_for_review(false) #是否提交稽核,true表示立馬提交稽核
screenshots_path("./fastlane/screenshots") # 截圖圖片展示
price_tier 0 #app 出售價格
trade_representative_contact_information( #iTunes store 資訊
first_name: "yinhang", #名
last_name: "nongye", #姓
address_line1: "123", #地址
address_line2: "",
address_line3: "",
city_name: "BeiJing", # 城市
state: "BeiJing", # 省
country: "China", #國家
postal_code: "100000", # 郵編
phone_number: "+86 13700000000", # 手機
email_address: "abc.abchina.com", #郵箱
)
app_review_information( # app稽核資訊
first_name: "yinhang", # 名
last_name: "nongye", #姓
phone_number: "+86 13700000000", #聯絡資訊電話號碼
email_address: "abc.abchina.com", #聯絡資訊郵箱
demo_user: "123", #稽核測試賬號
demo_password: "123", # 稽核測試密碼
notes: "備註資訊" # iTunes Store 稽核資訊備註
)
#提交稽核資訊:加密, idfa 等
submission_information(
export_compliance_encryption_updated: false,
export_compliance_uses_encryption: false,
content_rights_contains_third_party_content: false,
add_id_info_uses_idfa: false
)
name({
'zh-Hans' => "nongyeyinhang" # app名稱
})
description({ #iTunes Store 中描述資訊
'zh-Hans' => "APP的描述資訊,用於APP功能的描述和介紹不能少於10個字元"
})
release_notes({
'zh-Hans' => "第一個版本測試"
})
keywords( # 收縮關鍵詞
"zh-Hans" => "農業, 銀行"
)
promotional_text(
"zh-Hans" => "宣傳文字資訊介紹",
)
support_url({ # 技術支援網址(URL)
'zh-Hans' => "
})
marketing_url({ #營銷網址
'zh-Hans' => "
})
privacy_url({
'zh-Hans' => "
})
app_icon('./fastlane/metadata/AppIcon.png') #應用圖示
primary_category("Utilities")
# primary_first_sub_category "Card"
# primary_second_sub_category "Casino"
# 要設定的次要類別 無
# secondary_category
# 設定的次要第一個子類別 無
# secondary_first_sub_category
# 設定的次要第二個子類別 無
# secondary_second_sub_category
automatic_release true #稽核過之後自動釋出
{
"CARTOON_FANTASY_VIOLENCE": 0,#卡通或幻想暴力
"REALISTIC_VIOLENCE": 0,#現實暴力
"PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE": 0,#大量露骨或殘暴的現實暴力
"PROFANITY_CRUDE_HUMOR": 0,#低俗笑話
"MATURE_SUGGESTIVE": 0,#成人/性暗示題材
"HORROR": 0,#恐怖/驚悚題材
"MEDICAL_TREATMENT_INFO": 0,#醫學/醫療資訊
"ALCOHOL_TOBACCO_DRUGS": 0,#使用或提及煙、酒或毒品
"GAMBLING": 2,#模擬賭博
"SEXUAL_CONTENT_NUDITY": 0,#色情或裸露內容
"GRAPHIC_SEXUAL_CONTENT_NUDITY": 0,#色情及裸體畫面
"UNRESTRICTED_WEB_ACCESS": 0,#無限制的網站訪問
"GAMBLING_CONTESTS": 0#賭博和競賽
}
default_platform(:ios)
platform :ios do
desc "上傳至 App Store"
lane :release do
scheme_name="ABCDeploy"
output_directory="/Users/abc/ipa"
scheme_version="1.0.0"
output_name="#{scheme_name}_#{scheme_version}.ipa"
gym(
export_method: "app-store",
export_xcargs: "-allowProvisioningUpdates",
scheme: scheme_name,
clean: true,
output_directory: output_directory,
output_name: output_name,
)
deliver(
Ipa:"output_name"
submit_for_review: true,
ignore_language_directory_validation:true,
force:true
skip_screenshots:true
)
end
五、總結
“呼叫plist檔案實現自動推送”中所使用到的ExportOptions.plist檔案是透過集中構建自動生成的,不需要人工干預和維護,對於已經發布過的iOS應用來說十分的便利快捷,目前研發中心專案大多使用該種方式進行應用的自動推送。 “使用Fastlane實現自動推送”由於提供了一整套action的工具集,實現的功能比較強大,但所需維護的蘋果商店資訊比較複雜,初次使用很容易出現資訊錯誤的情況適合多次投產的“老手”使用,並且可以對自動推送進行定製化開發,靈活性較高。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31558019/viewspace-2727701/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis 在 vivo 推送平臺的應用與優化實踐Redis優化
- Redis 在 vivo 推送平臺的應用與最佳化實踐Redis
- 自動化測試:Monkey工具實踐應用~
- 基於LINUX平臺的自動化測試的研究與應用
- 深度學習的應用與實踐深度學習
- appuploader iOS 應用自動釋出APPiOS
- Flink在美團的實踐與應用
- IRITA HUB的跨鏈實踐與應用
- 文件驅動開發模式在 AIMS 中的應用與實踐模式AI
- RNStudyNotes 研究與實踐
- iOS App冷啟動治理:來自美團外賣的實踐iOSAPP
- 求助:求移動應用自動釋出到應用市場的方法或思路
- MYSQL自動備份策略的選擇與實踐MySql
- 愛奇藝iOS深度實踐 | SiriKit詳解應用篇iOS
- BIGO 的資料管理與應用實踐Go
- Apache Flink 在鬥魚的應用與實踐Apache
- 淺談分散式 ID 的實踐與應用分散式
- Kafka應用實踐與生態整合Kafka
- 大資料使用者畫像的方法、實踐與行業應用大資料行業
- vivo前端智慧化實踐:機器學習在自動網頁佈局中的應用前端機器學習網頁
- iOS–KVO的實現原理與具體應用iOS
- Flutter與Native混合開發-FlutterBoost整合應用和開發實踐(iOS)FlutteriOS
- Istio技術與實踐03:最佳實踐之sidecar自動注入IDE
- 唯品會iOS程式碼覆蓋率的應用實踐iOS
- Spring Boot自動配置原理與實踐(一)Spring Boot
- Spring Boot自動配置原理與實踐(二)Spring Boot
- vivo 推送系統的容災建設與實踐
- 用 Jenkins 自動化構建 Android 和 iOS 應用JenkinsAndroidiOS
- Redis 在 Web 專案中的應用與實踐RedisWeb
- Redis在Web專案中的應用與實踐RedisWeb
- Apache Flink 在汽車之家的應用與實踐Apache
- Flink 在中泰證券的實踐與應用
- 《探索Python Requests中的代理應用與實踐》Python
- 單元測試的入門實踐與應用
- vivo直播應用技術實踐與探索
- Embedding技術與應用(3):Embeddings技術的實踐應用
- iOS 應用開發中的斷點續傳實踐總結iOS斷點
- GroovyShell 應用實踐