iOS游戲開發和提交的一些「坑」和「解決方案」

jopen 9年前發布 | 14K 次閱讀 IOS iOS開發 移動開發

鑒于在iOS類的游戲開發和提交審核的過程中老是遇到一些坑,為了避免在同一個坑里跌倒兩次,故在產生了記錄之的想法。經過了幾個月,已經積攢了十個坑,現在將其共享出來,以后將會持續更新。

我已經將本文markdown源文件放在了Github上,通過Fork和P&R來提交你的「坑」和「解決方案」,幫助我完善之。你也可以通過關注這個項目對這些「坑」保持持續關注。

  • iOS設備出現本地存檔丟失

    • 描述:在蘋果設備上,當系統提示存儲空間已滿時,發現本地的存檔會丟失。

      </li>

    • 原因:在默認情況下,本地存檔放在了/Library/Caches下面,根據蘋果官方的描述,放在/Library/Caches目錄下的任意文件將在系統彈出存儲空間將滿的警告時被系統清空

      </li>

    • 解決方案:將所有數據和熱更新文件放在/Library/Application Support目錄下,此目錄下的所有文件在收到空間將滿警告時不會被移除。此外,這還避免了放在Documents目錄下可能會被蘋果在審核中干掉的風險。

      </li> </ul> </li>

    • Apple Watch 版本提交失敗

      • 描述:首次向AppStore提交帶Apple Watch的版本,提示失敗,導致提交無法繼續。

        </li>

      • 原因:Apple Watch版本的AppIcon的PNG圖帶了Alpha通道,故被拒。

        </li>

      • 解決方案:去除Apple Watch版本的所有AppIcon的PNG圖的Alpha通道。

        </li> </ul> </li>

      • Apple Watch 版本審核被拒

        • 描述:Apple Watch版本提交后,在蘋果審核的階段被拒了。

          </li>

        • 原因:在iPhone上的Apple Watch的這個應用內,我們的游戲名稱顯示為codename:xxx ios。

          </li>

        • 解決方案:發現在Watchkit Extension的Info.plist里,Bundle name為默認的PRODUCT_ID,這就是我們的codename,將Bundle name修正為游戲名稱即可。需要注意的是Bundle name不等同于Bundle display name,前者用于系統的設置的一些顯示名稱,后者用于在Launcher的App的名稱顯示。

          </li> </ul> </li>

        • 單機游戲內購(IAP)被破解

          • 描述:根據后臺的Counter報告,我們確信我們的單機游戲內購被破解了。

            </li>

          • 原因:一個高度可能的原因是我們把訂單編號存在本地的一個緩存文件里,每次去蘋果服務器詢問訂單是否成功時,先去此緩存文件內查找是否有相同的訂單編號,若找到則說明訂單有重復發。但是一旦玩家刪除了這個緩存文件,則可反復利用一個已經支付成功了的訂單號來反復刷了。

            </li>

          • 解決方案:最穩妥的解決方案是將訂單編號存在服務端,然后對服務端的通信進行加密。我們采用了一種不走服務器的方法:即在首次充值成功時,給金幣的緩存文件添加一個標記位(負號),然后查詢訂單緩存文件時,先去查詢此標記位,若找到標記位,則說明之前充值過,訂單緩存文件應有內容,如果訂單緩存文件內容為空,或找不到有意義的訂單編號,則說明玩家作弊,此次充值金幣將不會加上(作弊懲罰)。由于緩存文件事先已被AES加密過,所以玩家很難去找到該標記位。

            </li> </ul> </li>

          • Apple Watch OS2 運行時找不到圖片

            • 描述:Apple Watch OS1的版本一行代碼沒改,但運行起來卻提示圖片無法找到。

              </li>

            • 原因:WatchKit App 下的Images.xcassets里的圖只設置了1x的圖片,2x和3x沒有設置。

              </li>

            • 解決方案:設置好2x和3x的圖片。

              </li> </ul> </li>

            • 用Application Loader 上傳二進制時報錯ERROR ITMS-90168: "The binary you uploaded was invalid."

sesese色