標籤彙整: itunes connect

Developers are responsible for assigning appropriate ratings to their Apps

3.8 - Developers are responsible for assigning appropriate ratings to their Apps. Inappropriate ratings may be changed/deleted by Apple

3.8 Details

The rating you’ve selected, 12+, is inconsistent with the content of your app. Since your app includes contests or sweepstakes, you must select “Yes” for Gambling and Contests in iTunes Connect.

Next Steps

Please update your Rating selections in iTunes Connect.

- Log in to iTunes Connect
- Click on “My Apps”
- Select your app
- Scroll down to select a Rating on the App Details page
- Click the Edit button next to “Rating”
- Change the Rating selections
- Click “Save”
- Once you’ve completed all changes, click the “Submit for Review” button at the top of the App Details page.

NOTE: Applications must be rated accordingly for the highest level of content that the user is able to access in the app.

 

簡單說就是 App 裡面的抽獎、贈獎活動包含了賭博的成分,必須在年齡分級裡勾選 "賭博和競賽" 。

另外可能也需要增加與 Apple 無關之聲明,請參考此文章

Official rules for sweepstakes and contests must be presented in the App and make it clear

20.2 - Official rules for sweepstakes and contests must be presented in the App and make it clear that Apple is not a sponsor or involved in the activity in any manner

20.2 Details

Your app includes a contest but it does not:

- Indicate that Apple is not involved in any way with the contest.

Next Steps

It is necessary to:

- Include official rules of the contest or sweepstakes in the app
- Include an explicit statement in the contest or sweepstakes rules specifying that Apple is not a sponsor
- Ensure that the contest or sweepstake prizes are not Apple products

 

App 裡必須要有參加辦法,並聲明 Apple 不是該比賽、活動、賭博的主辦、協辦廠商與贊助商,且獎品不是 Apple 的產品。

另外可能也要修改年齡分級,請參考此文章

卡在 TestFlight 邀請函無法同意

最近嘗試使用 TestFlight Beta 版測試,其中有個外部測試人員點了信中的邀請連結登入 Apple ID 後仍然顯示以下訊息:

You aren't currently testing any apps. To accept an invitation, you must tap the link in the invitation email.

 

原因是你"必須"使用 Safari 開啟該連結,最好是用內建的郵件 App 開啟就絕對沒問題。如果是使用 Gmail App 點選它可能是用 Chrome App 打開,千萬別讓費時間在這啊~

Apps must follow the iOS Data Storage Guidelines or they will be rejected

2.23 - Apps must follow the iOS Data Storage Guidelines or they will be rejected

On launch and content download, your app stores 19.1MB, which does not comply with the iOS Data Storage Guidelines.

原因是我把下載的內容放到 <Application_Home>/Documents 底下,而這目錄預設是會備份到 iCloud 以及 iTunes 。依照 Guidelines 來看,Documents 只能放由使用者操作後產生的,而那種能重複下載或產生的要放在 <Application_Home>/Library/Caches ,暫存檔則放在 <Application_Home>/tmp

Cachestmp 不會備份,且 Caches 不是永久的,當裝置容量不夠時會刪除、系統還原時也會清空,如果想要永久就只能放 Documents 。 Library 底下除了 Caches 以外都會備份到 iTunes ,但不會上傳至 iCloud 。

放在 Documents 的檔案也可以手動標示為不要備份,由於我想永久保留至 App 內所以我採用此方法。

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL

{

    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";

    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);

    return result == 0;

}

請照以下步驟檢查 Documents 是否肥大
Install and launch your app
Go to Settings > iCloud > Storage > Manage Storage
Select your device
If necessary, tap "Show all apps"
Check your app's storage

參考連結
iOS Data Storage Guidelines
How do I prevent files from being backed up to iCloud and iTunes?
File System Programming Guide

improper Advertising identifier [IDFA] Usage

IDFA 全名是 Identifier for Advertisers
我有用 AdMob SDK ,在驗證時出現這警告,沒理它直接上傳,狀態變成 Upload Received ,正當我還沉浸在愉悅中時狀態又變成 Invalid Binary ... (我還第一次遇到這種狀態)

好吧 原來還要另外做設定
在 Advertising Identifier 這區塊要做調整

Does this app use the Advertising Identifier (IDFA)?

選 Yes

This app uses the Advertising Identifier to (select all that apply):
Serve advertisements within the app

Limit Ad Tracking setting in iOS
打勾

做完上述設定後,驗證不再有警告,也順利上傳啦~

The app references non-public selectors in Payload ... id

此文章已經過期 SDK v4.0.1 之後變不再有此問題

這是一個在編譯時都沒甚麼徵兆,在上傳到 iTunes Connect 檢查才會冒出的警告。
雖然只是警告而非錯誤,怕審核不通過,所以還是處理一下。(好像也有人選擇註記在審核的欄位裡)

The app references non-public selectors in Payload/{Appname}.app/{App name]}: id

花了許多時間才發現是 Facebook SDK 惹的禍,原因是裡面的 property 名稱使用了保留字 id 造成的。
這問題好像存在很久了,只是 Facebook 一直沒去修正。
例如 FBGraphUser.h 這檔案打開來看...


@protocol FBGraphUser<FBGraphObject>
...
@property (retain, nonatomic) NSString *id;
...
@end

 

這樣的檔案不只一個,最簡單的修改方法就是用 [user objectForKey:@"id"] 或 user[@"id"] 來取代原來的 user.id。


/*
 * Callback for session changes.
 */
- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:
            if (!error) {
                // We have a valid session
                //NSLog(@"User session found");
                [FBRequestConnection
                 startForMeWithCompletionHandler:^(FBRequestConnection *connection,
                                                   NSDictionary<FBGraphUser> *user,
                                                   NSError *error) {
                     if (!error) {
                         self.loggedInUserID = [user objectForKey:@"id"];
                         self.loggedInSession = FBSession.activeSession;
                     }
                 }];
            }
            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }

    [[NSNotificationCenter defaultCenter]
     postNotificationName:FBSessionStateChangedNotification
     object:session];

    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    }
}



這類錯誤警告只要用最後的關鍵字搜尋整個專案大概可以找到要改的地方,只不過以 id 這種前後都可以組很多單字就只能用猜的...

使用 Application Loader 上傳至 iTunes Connect

不知從什麼時候開始,我用 Xcode 上傳放了一整天一直無回應(進度條一直沒變化),只好使用 Application Loader 上傳。

Xcode → Product → Archive → 跑完之後會自動開啟 Organizer 的 Archives 分頁。

這時滑鼠右鍵該項目 → Show in Finder → 對 .xcarchive 這個檔案 → 顯示套件內容 → 把在 Products/Applications/ 目錄下的 xxx.app 壓縮 → 把壓縮檔移至桌面(方便上傳而已)

呼叫 Spotlight(上方工具列的放大鏡) → 搜尋 Application Loader 並執行。
接下來的步驟就不用我說了吧! 上傳時間大約等個30分鐘再回來看看~