問題一:接入SDK報錯
接入第三方SDK的framework支持的版本在iOS8.0及以上,而自己的項目的最低版本為iOS6.0(第三方SDK版本較高,不兼容)會報以下錯誤(圖1):
而如果簡單地把Development Target 改為iOS8.0,項目又會報出其他的錯(圖2):(這種錯的解決方案卻是需要把Development Target 改為iOS7.0以下,造成了問題的死循環)
解決方案:
1.如大部分人所說,選擇Development Target 為iOS6.0,將framework重新編譯后,再接入使用(這種方案一般不會成立,除非是自己的SDK,第三方是不愿費力氣來兼容你的版本)
2.不僅僅需要把項目下的Development Target修改成iOS8.0(圖4),還需要把cocos2dx對應的iOS Development Target改成iOS8.0(圖5),兩者統一,問題完美解決
(下面的問題不只是cocos2dx項目會出現,只要是iOS開發,都有可能出現)
問題二:內購問題
1.內購測試出錯:測試機iPhone升級系統至iOS11后,原來的測試帳號不能使用(無限循環地讓輸入帳號密碼),重新申請測試帳號解決!
2.內購沙盒測試正常,應用上線后,點擊支付一直返回失敗(用戶看到的結果是沒任何反應),支付確認提示框都沒有彈出。
解決方案:
切換網絡、修改網絡DNS為8.8.8.8、重啟手機等方法多試幾次,可以正常購買。但是仍然有許多用戶不知道上述方法,不知道是不是蘋果服務器的問題才造成支付失敗。在AppStore上更新幾次版本后,可以正常支付。
出現這種情況,可能是在交易取消或購買成功后,沒有從交易隊列中移除本次交易。
解決方案1:
由于在用戶購買成功或者點擊取消購買的選項后回調方法
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction;
在該方法內除了通過支付信息編寫自身的業務的代碼外,還要記得調用
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
方法通知蘋果的支付隊列該交易已經完成。
解決方案2:如果上述原因不成立,可以使用下面的方案:
在每次發起購買之前,先檢查交易隊列中是否有未完成的交易,將隊列中的交易全部處理完,就不會再有上述提示。
// 獲取之前未完成的交易,處理
NSArray* transactions = [SKPaymentQueue defaultQueue].transactions;
if (transactions.count > 0) {
? ? ? ? ?NSLog(@"有未完成的交易%@",[transactions firstObject]?:@"nil");
????????//檢測是否有未完成的交易
????????SKPaymentTransaction* transaction = [transactions firstObject];
????????if (transaction) {
????????????????switch (transaction.transactionState) {
????????????????????????????case SKPaymentTransactionStatePurchased://交易完成
????????????????????????????{
????????????????????????????????????????[self completeTransaction:transaction];
????????????????????????????????????????[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
????????????????????????????????????????return;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
????????????????????????????case SKPaymentTransactionStateFailed://交易失敗
????????????????????????????{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[self failedTransaction:transaction];
????????????????????????????????????????????[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
????????????????????????????????????????????return;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
????????????????????????????????case SKPaymentTransactionStateRestored://已經購買過該商品
????????????????????????????????{
????????????????????????????????????????????[self restoreTransaction:transaction];
????????????????????????????????????????????[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? default:
????????????????????????????????????????????????break;
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? }
}
問題三:磁盤內存不足
項目編譯報錯lipo,讀寫錯誤;Mac磁盤內存不足,清理磁盤解決!
再附上Xcode清理方式:
command + shift + G ?(快捷鍵)前往文件夾 : ? /Users/用戶名/Library/Developer/Xcode/DerivedData
DerivedData里面存儲的是Xcode運行APP的緩存文件,可以直接刪除
這里有個清理MAC的鏈接:http://blog.csdn.net/qq_26598821/article/details/51849209
問題四:Archive打包后上傳AppStore時報錯
注意:Archive之前,Clean一下工程(快捷鍵 command+shift+K),否則很容易出錯