打包、發(fā)包、證書方面常見錯誤匯總

看看妹子提提神-開始創(chuàng)作

前言:各類證書生產(chǎn)就不贅訴
公司或個人開發(fā)者證書與企業(yè)開發(fā)者證書的申請和發(fā)布不同之處在于用企業(yè)賬號申請的證書不需要添加設(shè)備的UUID進(jìn)證書里面,而其他賬號申請的證書需要添設(shè)備的UUID,設(shè)備才可以使用。

開發(fā)(Development)證書用于測試環(huán)境下使用,可以直接安裝到手機(jī)上(不用提交到Appstore),但一個描述文件最多只能綁定100臺設(shè)備(因此通過這種證書正式發(fā)布應(yīng)用是行不通的)。
打包測試iPa 選中Product-Archive(注意選擇前把各種斷點去掉)


打包選擇

證書的使用

如果開發(fā)者B,登錄開發(fā)者賬號,下載證書(cer文件)運(yùn)行,只有證書沒有私鑰,是不能正常使用的。所以如果有新同事加入到開發(fā)組的時候,應(yīng)該從本地鑰匙串中選擇證書,一定要記得展開證書那一條顯示出私鑰并將兩行都選中,右鍵導(dǎo)出2項,輸入密碼之后就生成p12文件(包含證書和私鑰)給同事。
另外可以給同事一份描述文件(Provisioning Profiles),用于本地開發(fā)識別測試設(shè)備。
需要強(qiáng)調(diào)一點,證書和項目關(guān)系其實并不大,證書一般有效期只有一年,當(dāng)證書過期后,只需要重新生成一份證書,上傳到開發(fā)者賬號
就行,同時因為原有證書過期,需要重新生成Provisioning Profiles
文件。然后給同事們最新的p12文件和Provisioning Profiles文件就行
所以開發(fā)者賬號
中的證書,配置文件是可以放心操作的(比如誤刪了,或者找不到證書私鑰了)
·

證書過期/即將過期

疑問一:證書過期了,會影響到 AppStore 上面的應(yīng)用嗎?
答:證書過期不會影響已上架 AppStore 應(yīng)用,但是推送會出問題,更新推送證書也不用下架重新發(fā)布,可以重新生成,只要保證 developer.apple.com 中那個 APP ID 的推送證書和推送服務(wù)器上的一致即可。但是賬號欠費的話應(yīng)用會被下架。

疑問二:證書過期了/即將過期怎么辦?
答:首先,打開密鑰中心,生成一個CSR(證書請求)。然后,到Apple Center把證書revoke,然后新建一個,新建的將會默認(rèn)是剛剛revoke的證書的所有設(shè)置的。把下載回來的證書導(dǎo)出一份p12格式的保存起來(因為如果其他人需要的時候,只能跟你拿了,在Apple Center下載的用不了的。原因是還需要你電腦的密鑰)然后去provision profile edit 一下,從新下載,替換掉原來的。你就可以繼續(xù)開發(fā)了。不需要提交新 App 到 AppStore。

??官方資料
Provisioning Profiles 描述文件
在這里,我引用別人的一段話,因為覺得寫得很喜感,但又很實在。


我想這個界面一彈出來的時候,蛋蛋憂傷迎面撲來。然后怒點 Fix issue,然后你們團(tuán)隊負(fù)責(zé)管理證書的基友突然發(fā)現(xiàn)證書中心多了好多好亂的證書以及描述文件,然后他爆了一句:what the f××k!刪掉了帶有Xcode *的證書以及描述文件,然后自己又暴力的點了一發(fā)Fix issue,然后你突然調(diào)試不了了,再暴擊Fix issue鍵,最后整個團(tuán)隊都只有通過Fix issue來真機(jī)調(diào)試了…

所以慎點Fix issue,如果點擊這個選項,聰明的(蠢哭的)Xcode就會自己管理描述文件,然后各種莫名其妙的帶有Xcode *的證書以及描述文件…

其實只要堅信一點,證書、設(shè)備ID、AppID、描述文件都弄對了就絕逼不會出問題的!

描述文件過期
蘋果官方文檔寫明,企業(yè)證書有效期是3年,而描述文件只有1年有效期。所以當(dāng)你的描述文件過期(expire)時。不用慌張,我看到網(wǎng)上好多朋友說刪除重新生成,其實不用這么麻煩,只需要3步完成:點擊過期的描述文件展開詳情界面
-點擊Edit按鈕
-點擊Generate按鈕

打包安裝失敗

前言:iOS 的內(nèi)測應(yīng)用在安裝時,很多人都遇到過安裝失敗的情況,安裝失敗的原因比較多,下面將一些常見原因總結(jié)如下,方便開發(fā)者進(jìn)行排查。在 iOS 9 中啟動應(yīng)用時,出現(xiàn)提示“未受信任的企業(yè)級開發(fā)者”這樣問題是因為在 iOS 9 以后的版本中,蘋果對企業(yè)簽名的應(yīng)用做了更嚴(yán)格了限制。在 iOS 9 中點擊“安裝”按鈕后,沒有彈出“是否安裝”的提示這個問題是因為 iOS 9 的一個 Bug 導(dǎo)致的。出現(xiàn)這個問題的前提,一般是由于用戶已經(jīng)從蘋果官方 App Store 上安裝了相同的應(yīng)用。
【解決辦法】
先在設(shè)備中刪除之前已經(jīng)安裝的應(yīng)用,然后再從托管平臺安裝即可。
為什么在 iOS 9 中,點擊“安裝”按鈕后,沒有任何反應(yīng),桌面也沒有出現(xiàn)應(yīng)用圖標(biāo),但是狀態(tài)欄上的網(wǎng)絡(luò)圖標(biāo)在轉(zhuǎn)這是由于 iOS 9 中的一個 Bug 造成的。雖然看上去沒有反應(yīng),其實應(yīng)用已經(jīng)在后臺開始下載并安裝了,狀態(tài)欄上的網(wǎng)絡(luò)圖標(biāo)在轉(zhuǎn)就是一個證明。這個時候,只要多等待一會兒就好了,應(yīng)用安裝完成之后會在桌面上顯示出來的。
應(yīng)用安裝過程中提示"無法下載應(yīng)用程序"
原因一:在導(dǎo)出 iOS App 的安裝包文件( .ipa 文件)時,選擇了 App-Store 方式。
在導(dǎo)出 iOS 的.ipa文件時,有些開發(fā)者選擇了App-Store方式,這種方式導(dǎo)出的.ipa文件,只適合于上傳到蘋果App Store,并不能通過托管平臺來安裝。如果是這種方式導(dǎo)出的.ipa文件,傳到托管平臺上是不能通過安裝的。
原因二:在導(dǎo)出 iOS App 的安裝包文件( .ipa 文件)時,選擇了 Ad-hoc 方式,但是沒有添加設(shè)備 UDID 。
在導(dǎo)出 iOS 的安裝包文件時,如果選擇了Ad-hoc方式(一般用于蘋果個人開發(fā)者賬戶),那么,如果要某臺設(shè)備可以安裝,則必須要將這臺設(shè)備的UDID
添加到導(dǎo)出安裝包時所用的證書文件中(.mobileprovision
文件),才可以在這臺設(shè)備上安裝。使用Ad-hoc方式導(dǎo)出的安裝包文件上傳到托管平臺后,托管平臺會顯示為內(nèi)測版,同時會在應(yīng)用管理中,顯示出該安裝包的證書中包含的UDID列表。開發(fā)者可以根據(jù)顯示出的UDID列表,來排查某臺設(shè)備的UDID有沒有被添加到安裝包的證書中。
原因三:在導(dǎo)出 iOS App 的安裝包文件( .ipa 文件)時,選擇了 In-house 方式,但是證書已過期或被撤銷。
在導(dǎo)出 iOS 的安裝包文件時,如果選擇了In-house
方式(一般用于蘋果企業(yè)開發(fā)者賬戶),此時,如果出現(xiàn)無法安裝的情況,開發(fā)者可以檢查一下自己的企業(yè)開發(fā)者證書是否已過期或被撤銷。因為蘋果對于企業(yè)開發(fā)者證書管理較為嚴(yán)格,所以開發(fā)者如果使用不當(dāng),可能會導(dǎo)致企業(yè)證書被封,被封后的企業(yè)證書導(dǎo)出的安裝包,也是無法正確安裝的。
原因四:開發(fā)者在生成App安裝包時,沒有在 Xcode 中設(shè)置正確的 Architecture 。
iOS 應(yīng)用的Architecture(架構(gòu)),決定了這款 iOS 應(yīng)用可以在哪些設(shè)備機(jī)型上安裝。例如,如果某個應(yīng)用在 Xcode 中只添加了 arm64 這一種Architecture
,那么最終打包后的安裝包文件上傳到托管平臺后,對于 iPad mini、iPhone5 等以下設(shè)備,都是無法安裝的(因為這些設(shè)備都不是 arm64 架構(gòu))。換句話說,如果需要在某個設(shè)備上可以安裝,App 就必須支持那個設(shè)備的Architecture
。所以,正確的解決方法是,在生成 App 安裝包時,盡可能讓 App 支持更多的Architecture。
具體操作方法是:在Xcode-Build Settings-Architecture中,增加 armv7、armv7s、arm64,以便所有設(shè)備都可以安裝。然后,將"Build active architecture only"設(shè)置為NO。對于各個 iOS 設(shè)備支持的Architecture
類型。請點擊這里查看。
原因五:App 支持的 iOS 系統(tǒng)版本,和當(dāng)前設(shè)備系統(tǒng)版本不符。
打包時 App 選擇支持的 iOS 系統(tǒng)版本過低或者過高,都可能導(dǎo)致 App 無法安裝成功。例如,如果某個 App 設(shè)置了只支持 iOS 7.0 以上的系統(tǒng)時,那么,如果在 iOS 6.1 系統(tǒng)上安裝時,肯定是無法安裝成功。
因此,我們應(yīng)該盡量讓 App 盡可能支持更寬泛的系統(tǒng)版本。
具體操作方式是:在Xcode-General-Deployment Info-Deployment Target
中,給 App 設(shè)置一個盡量低的版本,例如 iOS 5.0。
原因六:開發(fā)者上傳的是一個破解的 ipa 安裝包,或者是一個使用破解 Xcode 方式打包生成的 ipa 安裝包,或者是通過 iTunes 生成的 ipa 安裝包。
通過任何非 Xcode(或 Xcode 的命令行工具)生成的安裝包,都是沒有辦法正確在設(shè)備上安裝的(越獄設(shè)備除外)。
常見的不正確的打包 ipa 的方式有:通過 iTunes 導(dǎo)出安裝包文件、通過 iTools 導(dǎo)出安裝包文件等等。這種類型的 App 上傳到托管平臺后,會顯示未簽名的標(biāo)簽提示。
【正確的方法】
使用一個正常的蘋果開發(fā)者證書,通過未破解的 Xcode 打包生成 ipa 安裝包。
原因七:設(shè)備上已經(jīng)安裝了這個App,且已經(jīng)安裝的 App 和要安裝的 App 是用不同證書打包的。
這種情況下,也會造成 App 安裝失敗。解決的方式很簡單,開發(fā)者只需將設(shè)備上原來已經(jīng)安裝的 App 刪除,再重新安裝新的 App 即可。
原因八:Info.plist 文件中的LSRequiresIPhoneOS 沒有設(shè)置,或者設(shè)置了 NO。對于 iOS 的 App 來說,如果Info.plist文件中的LSRequiresIPhoneOS
沒有設(shè)置,或者設(shè)置了NO,那么由 Xcode 導(dǎo)出的安裝包(.ipa包),就不會包含Payload文件夾,而是被一個叫做Applications的文件夾代替。這樣的安裝包在安裝時,會被 iOS 判定為無效的安裝包,所以無法被正確安裝。
【解決方式】
只需要將Info.plist文件中的LSRequiresIPhoneOS設(shè)置為YES,然后重新打包即可。具體操作為:在 Xcode 中打開Info.plist文件,然后檢查LSRequiresIPhoneOS是否已設(shè)置,如果沒有設(shè)置,就添加一個,然后將LSRequiresIPhoneOS的類型設(shè)置為Boolean,值設(shè)置為 YES。設(shè)置好以后,可以看到Info.plist文件中顯示Application requires iPhone environment的值為YES。
原因九:網(wǎng)絡(luò)出現(xiàn)中斷或異常。
遇到這種情況,用戶可檢查自己手機(jī)的所連接的網(wǎng)絡(luò)是否穩(wěn)定、速度是否正常等。可以嘗試一下其他網(wǎng)站,或者更換一個 Wi-Fi,或者由 Wi-Fi 換成 3G/4G 等,然后重新安裝。
【托管平臺】: 托管平臺是指將APP發(fā)布于第三方平臺上面,供用戶安裝測試。常見的托管平臺有蒲公英以及FIR
【App-Store】: App-Store版,用于發(fā)布到蘋果商店
【Ad-hoc】: 內(nèi)測版,用于內(nèi)部指定設(shè)備使用
【In-house】: 企業(yè)版,可在任何設(shè)備上安裝,但不能濫用

打包遇到找不到頭文件問題(不常見)

問題描述: 在debug模式下編譯運(yùn)行沒有問題,打包時在release時,product->Archive時編譯找不到頭文件


error-Cordova.h not found
??

項目中報錯找不到.h或者.m文件解決方法(常見問題)

  1. 在項目中本身就不存在,或者在本地沒有加入項目
  • 如果是協(xié)作開發(fā),可能小伙伴沒有提交到遠(yuǎn)程倉庫,導(dǎo)致你工程沒有,解決就是先更新在添加進(jìn)入工程
  • 在Founder本地,需要手動添加到工程
  1. 出現(xiàn)這個問題會特別蛋疼,明明存在該文件,但是一直報錯。
  • 確認(rèn)是否存在改文件,文件是否在拖進(jìn)項目時是否勾選上Copy items if needed
  • 在點擊Target,選擇項目,在Build Setting下面的Other Linker Flag 中添加 -all_load,這個是強(qiáng)制加載文件
  • 在Build Setting 中找到Search Paths, 添加$(SRCROOT)/項目名稱/存放該文件的文件夾,可以有多級文件目錄,這個$(SRCROOT)是系統(tǒng)環(huán)境變量,類似PHP中FILE可以獲得當(dāng)前文件的文件的路徑。
  • 清除Xcode緩存,Xcode有緩存,可能會導(dǎo)致文件加進(jìn)來的,但是找不文件。除了在通過Clean,還可以下面方方式來操作:找到位于 /User/用名/Library/Developer/Xcode/DerivedData文件夾下面的所有文件情況,然后重啟Xcode,注意不要刪除DerivedData文件哦。
  • 在Build Phases下面的Compile Sources里面檢查一下你的文件存不存在,如果不存在就添加。這里需要說明一下,如果你的項目中出現(xiàn)Duplicate 文件.o保存,一般都是你重復(fù)引用文件,在Build Phases下面的Compile Sources 里面檢查該文件,是否是重復(fù),如果重復(fù)把重復(fù)的去掉。

上架一些問題處理

  1. app 提交后正在審核,這時發(fā)現(xiàn)重大bug,可以采取撤回審核。具體怎么解決呢?
  • 在binary details里邊 reject按鈕 直接reject即可。重新上傳之后需要新排隊。
  • 如果輕微bug 還是先上架在迭代實為上策

下架

  • 在itunesconnect詳情里面找到rights and pricing按鈕選擇specific stores然后選擇Deselect all取消所有地區(qū)選擇后,詳情里就能看到delete app按鈕了。這是最佳的下架做法
  1. other 匯總

問題一:

1610969-2ff8be31879e50bf.jpg

這個問題就是你Xcode上設(shè)置的bundleID與證書上的bundleID不一致導(dǎo)致的,把他們修改一樣都好了。

問題二:

1610969-74d6f5749309305b.jpg

這個問題有很多的答案,我只提供一個大多數(shù)能解決方法
1.在鑰匙串訪問>鑰匙串修改Apple Worldwide Developer Relations Certification Authority證書:右鍵顯示簡介調(diào)整"總是信任" 為 "系統(tǒng)默認(rèn)"。
2.刪除已過期的Apple Worldwide Developer Relations Certification Authority證書,并下載新的Apple Worldwide Developer Relations Certification Authority證書,雙擊安裝。
3.刪除相關(guān)的 provisioning profiles,然后重新添加。(Xcode中的證書配置文件路徑:~/Library/MobileDevice/Provisioning Profiles)
問題三:
Getting ITMS-4238 “Redundant Binary Upload” error no mater what I change the build version or app version tobe higher
這個是已經(jīng)上傳了同一個版本的APP了,不能再繼續(xù)上傳,如果需要重新上傳,就需要改版本號。
問題四:
iPhone App Submitting - Error ITMS-90171 Invalid Bundle Structure Can't Contain Standalone Executables
這個是引入的第三方framework所帶的資源包有問題,有可能是bundle里info.plist使用到的資源在bundle里沒有
問題五:
ERROR ITMS-90474: "Bundle Invalid. iPad Multitasking support requires there orientations: 'UIInterfaceOrientationPortrait,UIIinterfaceOrientationPortraitUpsideDown,UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight'. Found 'UIInterfaceOrientationPortrait' in bundle.
在 TARGETS > iOS > General > Deployment Info 勾選 “Requires full screen”
問題六:
ERROR ITMS-90542: "Invalid CFBundleSupportedPlatforms value. The key 'CFBundleSupportedPlatforms' in the Info.plist file in bundle 'Payload/PgapIos.app/GoogleMaps.bundle' contains an invalid value '( "iPhoneSimulator" )'.
這個是編譯bundle的時候,是用模擬器來編譯的,解決方法是:在編譯bundle的時候選擇真機(jī)
ERROR ITMS-90086: Missing 64-bit support. Submission fails with error on submit app on iTunes
在 build settings 中的Valid Architectures, 添加arm64讓APP支持 64位的機(jī)器。XCode7不會有這種情況
問題七:
ERROR ITMS-90535 Unexpected CFBundleExecutable
在我這里是因為我的bundle里是生成了一個可執(zhí)行文件,從新做一個bundle文件,注意bundle項目Build Settings 中的Mach-o Type 要選擇 Static Library。如果是第三方的就把bundle里info.plist的 Executable file字段刪除掉(我自己的bundle如果刪除,上傳的時候會提示bundle是損壞的),然后重新打包。

1610969-ba966aedfdb4e172.jpg

問題八:
ERROR ITMS-90034: Missing or invalid signature
這個其實還是因為bundle里有個可執(zhí)行文件,在打包的時候沒能進(jìn)行簽名導(dǎo)致的。
問題九:
ERROR ITMS-90096:"You binary is not optimized for iPhone 5....".
在工程里的Images.xcassets添加并設(shè)置LaunchImage對解決ERROR ITMS-90096根本不會起到任何作用,需要單獨添加針對iPhone 5的載入圖片。關(guān)鍵點有三項:1、圖片的名稱必須叫Default-568.png。2、必須把圖片放在工程的根目錄下。3、圖片尺寸必須是320*568。
然后在plist中添加

1610969-7d19fa517e590b8c.png

問題十:

1610969-a7b6b0db869b69c9.jpg

使用Application Loader 上傳ipa出現(xiàn)的錯誤提示“application loader上傳出錯 生成的API分析文件太大”解決方法:解決辦法就是修改Xcode里面的Build

1610969-3f296db3a4a0ab4c.jpg

問題十一:
在Archive項目 時,出現(xiàn)了“Your build settings specify a provisioning profile with the UUID “487F3EAC-05FB-4A2A-9EA0-31F1F35760EB”, however, no such provisioning profile was found”的出錯。一直提示指定UUID的provisioning profile找不到,感覺很奇怪。明明自己的provisioning profile是剛下載好的,并且全是新安裝。于是通過谷歌找到了答案。
參考地址:http://stackoverflow.com/questions/1760518/codesign-error-provisioning-profile-cannot-be-found-after-deleting-expired-prof
這里所說的就是要通過修改你的項目的.xcodeproj文件來解決上述的錯誤。
1.找到項目中的*.xcodeproj文件,點擊右鍵,show package contents(打開包內(nèi)容)。
2.打開后找到project.pbxproj文件,用文本編輯器打開。其實就是右鍵,點擊open就好了。
3.打開這個文件后,按command+F,在這個文件中查找“PROVISIONING_PROFILE",找到和這個“
PROVISIONING_PROFILE="487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";"PROVISIONING_PROFILE[sdk=iphoneos
]"="487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";”類似的都刪除。(注意:只刪除雙引號里面的487F3EAC-05FB-4A2A-9EA0-31F1F35760EB就可以了)
問題十二:

1610969-9746d4a38d152630.png

在要上傳的包上右鍵[Show in Finder]然后依次展開[xxxx.xcarchive][Products][Applications][xxxx] // xxxx–項目名
然后搜索所有的info.plist
找到是哪個plist含有[CFBundleSupportedPlatforms]屬性,看是那個三方庫包含的這個plist,然后到Xcode里面刪除該屬性。
問題十三:


推送證書報警

這個原因也有多種,一個出現(xiàn)比較多的原因就是,你之前安裝的描述文件沒有包含推送證書。重新登錄到開發(fā)者中心,查看描述文件。

1610969-546b98ee9334cc55.png

你會發(fā)現(xiàn)Status變成的狀態(tài)是黃色的(正常是綠色),如下圖。

正常

點擊Edit,然后選擇Cenerate就行了。最后把描述文件下載,安裝。

版本迭代

Version

Version:是上架的版本號。Build:是本地顯示版本號。

  • 版本更新迭代就是更改了上架版本號Version。之前我的是1.0.0,首次修改了部分功能BUG,我修改為1.0.1。
  • 進(jìn)入iTunes提交頁面,添加”版本或平臺“!
  • detailFunc
最后,Xcode集成了APPlication Loader 工具,傳說上傳更迅速好用,期待以后用一下
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容