|
広告のトラッキングの実装についてIDFAの実装が必要となります。 簡易的な方法となりますが、下記の実装方法があります。
※実装前にプロジェクトのコピー(バックアップ)をとってから実装することをお勧めします。
IDFA対応コードの実装
No | 必須・任意 | 実装概要 | 1 | 必須 | 追加する広告の実装 | 2 | 必須 | フレームワークの追加 | 3 | 必須 | Info.plistの項目追加 | 4 | 任意 | 多言語化対応 | 5 | 必須 | IDFAコード実装 |
開発者ごとに異なると思います。 実装方法は各広告媒体会社にお問い合わせください。
※下の画像をご覧ください。
(1) プロジェクトを選択します。 | (2) TARGETSを選択します。 | (3) Generalタブを選択します。 | (4) 下方向にスクロールをすると | (5) 「Framework」の項目が見えます。 | (6) +ボタンでフレームワークを追加します。 |
下記の2点のフレームワークを追加します。 (1)AdSupport.framework (2)AppTrackingTransparency.framework
「Info.plist」に次の項目を追加してください。
Key | Privacy - Tracking Usage Description | Value | メッセージに表示する内容を入力します。 | ※xmlに直接追加する場合は「NSUserTrackingUsageDescription」となるはずです。
多言語化処理は任意の情報となります。 日本語のみでなく、英語などの複数言語を公開している場合は そのユーザに対応した言語を表示したいケースがあると思います。 その方法として「info.plist.stringの多言語化」があります。
(1)プロジェクトを選択します。 | (2)PROJECTを選択します。 | (3)Infoタブを選択します。 | (4)下にスクロールしていき、「Localizations」の項目の+ボタンを選択します。 | (5)Japanese(ja)を選択します。 |
(1)プロジェクトを選択して「New File...」を選択します。 | (2)iOSタブを選択して下方向にスクロールし、「Resource」グループの「Strings File」を選択します。 | (3)Save Asテキストボックスに「InfoPlist.strings」を入力してCreateボタンを選択します。 ※この名称を間違えると失敗するようですので、気をつけて入力してください。 |
(1)「Localize...」ボタンを選択します。 | (2)追加する言語を選択します。 |
図のように言語ごとに表示するメッセージを入力してください。
下記にコードの実装サンプルを記載します。 開発者の開発により、実装に適した実装にしてください。
今までは、下記のタイミングで実装していたと思います。 (1)AppDelegate (2)SceneDelegate (3)viewDidLoad しかし、広告の実装を済ませてから、IDFAを実行するのが正規手順となったようで iOS15からは上記(1)から(3)に実装しているとIDFAのメッセージダイアログが表示されません。
そのためにも、「UIApplicationStateActive」の値がtrueになっている場所での実装が必要となります。 (例) if (UIApplication.sharedApplication.applicationState == UIApplicationStateActive) { NSLog(@"UIApplicationStateActive is true."); }
例えば、下記に記したviewDidAppearイベントではなく、 ボタンをタップしたタイミングで実装する開発者の方もいらっしゃるようです。
[コード実装例] ※Objective-C
-(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self requestIDFA]; }
-(void)requestIDFA { ASIdentifierManager *identifierManager = [ASIdentifierManager sharedManager]; if (@available(iOS 14, *)) { // iOS14以降の処理 //IDFAダイアログを表示したいタイミングで次のコードを実行します。 //この時にNSUserTrackingUsageDescriptionにメッセージの内容を追加しておく必要があります。 [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { //広告の取得開始方法 [GADMobileAds.sharedInstance startWithCompletionHandler:^(GADInitializationStatus * _Nonnull status) { //ここで広告をリロードするなどしてください }]; if (status == ATTrackingManagerAuthorizationStatusAuthorized || status == ATTrackingManagerAuthorizationStatusNotDetermined) { //ユーザがプライバシー設定で「トラックしない」を選択していない(オプトイン) //もしくはrequestTrackingAuthorizationWithCompletionHandlerでダイアログをまだ表示していません。 //NSString *idfa = identifierManager.advertisingIdentifier.UUIDString; //NSLog(@"idfa:%@",idfa); // 取得したIDFAで何かするコード } else if (status == ATTrackingManagerAuthorizationStatusDenied) { // ユーザがプライバシー設定で「トラックしない」を選択(オプトアウト) // IDFAが取得できなかった場合のコード } else { // それ以外のなにか } }]; } else { // iOS13以前の処理 //ASIdentifierManager *identifierManager = [ASIdentifierManager sharedManager]; if ([identifierManager isAdvertisingTrackingEnabled]) { //NSString *idfa = identifierManager.advertisingIdentifier.UUIDString; //NSLog(@"idfa:%@",idfa); //取得したIDFAで何かするコード } else { //NSLog(@"failure"); //IDFAが取得できなかった場合のコード } } }
|
サンプルをコピー 他の広告ではUUID文字列を引数に設定しているようですが、 GoogleのAdMobを使用している場合は、AdMob側でUUIDの実装判定をしているようで その必要がないようです。
前提条件: Google Mobile Ads SDK 7.64.0 以降 上記前提条件を満たすと、何もしなくても自動的に登録されるようです。
[URL] https://developers.google.com/admob/ios/ios14#skadnetwork 2022年4月上旬に申請した時点では審査チームはiOS15以上でテストをしているようで iOS15向けの実装をしておいた方がいいと思われます。 IDFAが正しく表示されているキャプチャでは審査を受け付けてもらえませんでした。 動画で撮影したものを準備した方がいいと思います。 シミュレーターでキャプチャをした画像を提出しましたが、 iPhone実機で撮影したものでなければ審査として受け付けないという返信をされました。
動画についてはiOSに標準で使用可能な画面録画アプリで問題ないと思います。
[提出をしたときにリジェクトされたときの文書抜粋]
Guideline 2.1 - Information Needed
We're looking forward to completing our review of your app. Before we can continue, we need a video that demonstrates the current version, 1.2.7, in use on a physical iOS device.
Specifically, we need a demo video that shows the App Tracking Transparency permission request in your app. The video should show what the user sees after selecting "Ask App Not to Track" and "Allow," as well as any prompts or messages that appear before the permission request.
Keep these requirements in mind as you make your demo video:
- Only use footage of your app running on a physical iOS device, not on a simulator. - Make sure the video clearly documents all relevant app features, services, and user permission requests. - You can use a screen recorder to capture footage of your app in use.
Next Steps
Create the demo video, add a link to the video in the App Review Information section of your app’s page in App Store Connect, and reply to this message in App Store Connect.
To add the video link:
- Sign in to App Store Connect. - Click on My Apps. - Select your app. - Click on the app version on the left side of the screen. - Scroll down to App Review Information. - Provide the demo video link and any necessary access details in the Notes section. - Click the Save button at the top of the Version Information page.
Please note that if your app can only be reviewed with a demo video, you’ll need to provide an updated demo video for every app submission.
Resources
To learn more about providing information to App Store Review in App Store Connect, see App Store Connect Help.
|
> Keep these requirements in mind as you make your demo video: > > - Only use footage of your app running on a physical iOS device, not on a simulator. > - Make sure the video clearly documents all relevant app features, services, and user permission requests. > - You can use a screen recorder to capture footage of your app in use. 上記に記載しているようにiPhone実機で動画を撮影したものを提出してね といっています。
このことからも動画による提出が必要になるものと思われます。
iPhoneの画面録画のやり方を解説|内部音声や外部音声のみの設定方法 [URL] https://www.nojima.co.jp/support/koneta/82292/?amp=1 iPhoneで画面録画(スクショ動画を撮影)する方法──できないときの対策も解説 [URL] https://appllio.com/iphone-take-screenshots-video-capture
※念のため、審査に提出した撮影した動画ファイルは言語を英語にして撮影したものを提出しました。
1. トラッキング画面 設定画面→プライバシー→トラッキングの順で開き、トラッキング画面の状態を表示します。 このとき、許可(ON:緑色)の状態で撮影しました。 IDFAダイアログ実行済みの(審査する)アプリがあると、IDFAダイアログは一度実行すると実行されなくなります。 IDFAの動作確認にならないため、必要に応じてアプリのデータバックアップなどをして、 一度、アプリを削除してから実行することになると思います。
2. IDFAダイアログの表示 iPhone実機をXcodeに接続し、アプリを実行します。 正しく実装されていると、実装した場所でIDFAの確認ダイアログが表示されるはずです。 「許可」ボタンを 選択して、広告が正しく表示される状態を表示します。
3. トラッキング画面を再表示 トラッキング画面に戻ります。 結果を反映させるため、一度、プライバシー画面に戻ります。 再度、トラッキング画面を開きます。 追加したアプリのIDFAの状態が正しく反映されている状態を表示します。
上記、結果を撮影してmp4動画ファイルにして審査に提出するといいはずです。
|
iOSのステータスバーの高さ取得について(iOS15以降) |
iOSのステータスバーの高さの取得方法に変更になったようです。 ※Objective-Cでの実装方法となります。
[コード実装例] ※Objective-C
CGFloat height = 0.0f; NSSet *scenes = [[UIApplication sharedApplication] connectedScenes]; for (UIScene *scene in scenes) { if ([scene isKindOfClass:[UIWindowScene class]]) { UIWindowScene *windowScene = (UIWindowScene*)scene; height = windowScene.statusBarManager.statusBarFrame.size.height; break; } }
|
サンプルをコピー [経緯] 今までは下記の実装によりステータスバーの高さを取得していました。
CGFloat height = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height;
|
しかし、iOS15からはDeprecatedになっているため変更の必要が生じました。 [警告メッセージ]
'windows' is deprecated: first deprecated in iOS 15.0 - Use UIWindowScene.windows on a relevant window scene instead
|
statusBarFrameを参照するとAPI_DEPRECATEDメッセージが下記のように表示されていました。
Use the statusBarManager property of the window scene instead.
|
そのため、下記のようにしてSceneオブジェクトを生成しようとしたのですが下記の警告メッセージが表示されました。
UIWindowScene *scene = UIApplication.sharedApplication.connectedScenes;
| [警告メッセージ]
Incompatible pointer types initializing 'UIWindowScene *' with an expression of type 'API_AVAILABLE(ios(13.0)) NSSet *'
|
ここでNSSetを使用してくださいというメッセージが表示されているので、 オブジェクトを生成するために下記のように宣言をしました。
NSSet *scenes = [[UIApplication sharedApplication] connectedScenes];
|
上記のままではsceneオブジェクトの中にUIWindowSceneがどれなのかがわかりません。 そのため、for文を使用して判定処理をした後、UIWindowSceneでキャストをしたオブジェクトに対して statusBarFrameプロパティからステータスバーの高さを取得しました。
| できるかな (WEBアプリ) |
| 全部で10問あります。 例題→問題の繰り返しでゲームを実行します。 ゲームを中止したい場合は「中止」ボタンをタップしてください。 10問すべて答えると「こたえあわせ」の画面が開きます。 問題の答えと結果を確認することができます。 |
| ミニ脳トレ (WEBアプリ) |
| 何が来たの? 一番前の絵と同じ絵のボタンを次々にタップしてください。 |
| 旗あげ 指示通りに旗をあげさげしてしてください。 赤について指示があれば赤の旗をあげさげしてください。 |
| 順に消してね 上のグループの並び順とおなじ絵を順番にタップしてね。 上のグループがすべて消えたら次の問題が表示されるよ。 |
| 重複してるのは? 重複してるものをすべて選んで決定してね。 正解すると次の問題が表示されるよ。 |
| 神経衰弱 すべてのペアを選んでね。 すべてめくると次の問題が表示されるよ。 |
| じゃんけん 指示にあったじゃんけんをしてね。 勝つ指示があった場合、相手がグーを出したらパーを選んでね。 |
| 計算 指示に従った計算をしてね。 左上の画像の指示と同じ絵を計算してね。 |
| いなかったのは誰? 最初にいなかったキャラを選んでね。 最初に表示されたキャラと比較して次に表示された最初にいないキャラを選んでね。 |
ことわざ | 危うきこと累卵の如し | 適切な「ことわざ」の意味を3択から選んでね。 |
いつ崩れるかわからないような、非常に危険な状態にあることをたとえていう語。 |
四字熟語 | 意到随筆 | 適切な「四字熟語」の意味を3択から選んでね。 |
「おさかな」の「漢字」 | 鮎 | 適切な「おさかな」の「ふりがな」を3択から選んでね。 |
| | AppStoreおよびObjective-Cのお知らせ |
| AppStoreのお知らせ | | 参考までに(迷惑メールに気をつけて) | AppStoreを開く | 参考までに(迷惑メールに気をつけて) すごろく(おばけやしき) おばけやしきの入り口から屋敷内を通って出口のゴールするすごろくゲームです。 コマを進める手段は (1)サイコロ (2)カード のいずれかとなります。 (1)サイコロ 「サイコロ」ボタンをタップするとサイコロが回ります。 サイコロが表示されると次のボタンが表示されます。 (1)キャンセルボタン サイコロを中止してキャンセルします。 (2)決定ボタン サイコロが回っているのを停止してサイコロの目を決定します。 [ゴール] ゴールのマス目にピッタリ止まってくださいね。 [New Game] 1人から3人まで選んでください。 [コンティニュー] 前回の続きをロードできます。 コンティニューに使われるオートセーブは ターン終了後に実行します。 そのため、「ロード」をしたり、 再度ゲームをして「New Game」にすると コンティニュー用の保存データは上書きされ、 前回保存していたコンティニューデータは消えます。 1人であればユーザ終了後、 3人でゲームした場合は 各ユーザのターン終了後にオートセーブされます。 [ロード] セーブしたデータがあれば、その中から選んだデータをロードできます。 [セーブ] 各ユーザのターン終了後に保存できます。 3人でゲームした場合は (1)1人目のターン終了後 (2)2人目のターン終了後 (3)3人目のターン終了後 の3種類のいずれかのタイミングでセーブができます。 [マップ] 1.マップ その部屋のマップを確認できます。 マップは左右上下の方向ボタンで切り替えて確認できます。 2.イベント カードやおばけとのバトルが発生します。 3.宝箱 おばけとバトルに使うソードや弓が入っています。 一度開けると空箱になります。 4.扉 隣の部屋に通じる場所です。 5.階段 上の階もしくは下の階に降りる場合に使用します。 6.壁 通り抜けはできません。 7.通り道 隣の屋敷に通じる通路です。 [カード] 1.所持可能枚数 20枚が限度です。 20枚を所持し、カードを取得した場合は、いずれか一枚を捨てることになります。 カードの順番は順不同です(カードを引いた順番)。 カードを持っている場合は、カードボタンをタップするとカード画面が開きます。 左右ボタンでカードを切り替えて選択してください。 2.カードの種類 (1)コマを進めるカード 1から6まで進めるカードがあります。 (2)対決カード 各おばけ専用の対決カードがあります。 (3)護符カード おばけと対決するためのカードです。 (4)その他 ゲーム内で確認してください。 [バトル] おばけとのバトル (1)逃げる (2)カード (3)攻撃 のいずれかを選択してください。 バトルに勝つと恐怖心がゼロに戻ります。 (1)逃げる バトルはしないで逃げます。 逃げる際に失敗すると恐怖心ダメージを負います。 恐怖心のダメージがMAXになるとリタイアとなります。 (2)カード バトルが面でカードボタンが表示されます。 このカードはおばけと戦うためのカードを所持している場合のみ有効です。 カードをについて左右ボタンで使用するカードを切り替えて攻撃に使用するカードを選んでください。 (3)攻撃 ソードもしくは弓の2種類から選択してください。 ソードもしくは弓は宝箱(ランダム)に入っています。 もしも開けたしまった宝箱からはとることができません。 ソードと弓の2つを所持している場合は、攻撃を選択すると、どちらを使用するか?の確認ボタンが表示されます。 攻撃に使用する方を選んでください。 ソード:弓と比較するとダメージが少ない可能性があります。 弓:ソードと比較すると攻撃が当たらない可能性があります。 戦うカードもしくはソードや弓がない場合は、逃げるボタンをタップするしかありません。 恐怖心がマックスになるとゲームリタイアになります。 [情報] 情報ボタンをタップすると 参加したプレイヤーの情報を表示します。 見えない部分はスクロールをして、ご確認ください。 [結果発表] 全員のゴールもしくはリタイアが決まった後に一覧で表示します。 見えない部分はスクロールをして、ご確認ください。 ゲーム終了ボタンをタップすると前の画面に戻ります。
下記は日本語のみとなります。
[計算] 計算問題です。
[暗記] ストーリー形式の暗記問題です。
[観察] (1) あの人です (2) だるまさんがころんだ (3) いのししハンティング (4) またぎ (5) いなばのうさぎを連れてって
[占い] おみくじタイプの占いです。
[判断] 判断が必要な問題です。 (1) 素数ジャッジメント (2) 連続していない数字はどれ (3) 数字を並び替え (4) 見つけてね (5) プレゼントを間違えないで
[お知らせ] 迷惑メールについて
[ヘルプ] 各ヘルプがあります。
今後とも、abc3.meをよろしくお願いします。
by abc3.me
|
| | | | | | | | | | | abc3.me02(水道光熱費) | AppStoreを開く | abc3.me02(水道光熱費管理)
[ver 1.2.7]
[修正概要] IDFA確認ダイアログ表示処理追加 AdMobのトラッキング処理のため確認ダイアログが一度だけ表示されます。 「プライバシー」設定で、アクティビティを追跡してもよいか許可を変更したい場合は 設定」>「プライバシー」>「トラッキング」の順に選択して変更をすることができるようです。 IDFAはアプリ個別に許可の変更を設定できます。 Googleが端末識別番号UUIDを使用してユーザが見てみたい広告を表示してもいいか?(許可)、ランダムに表示される広告で構わない(許可しない)?を選択してください。 (1) 許可ボタン: おすすめの広告を表示します。 (2) Appにトラッキングしないように要求ボタン: ユーザが興味ない広告を表示します。 ※いずれにせよ、広告は表示されます。 [開発ユーザへのメモ] iOS15以上の対応として 広告にトラッキング処理を実装するため、例えば下記のような (1) AppDelegate (2) SceneDelegate (3) 起動画面のモジュールの- (void)viewDidLoad 場所に処理を実装すると、IDFAの確認画面が表示されません。 そのため、UIApplicationStateActiveである場所での実装が必要となります。 例えば、画面モジュールで画面作成し準備が整った後で実行されるメソッド -(void)viewDidAppear:(BOOL)animated ※Objective-Cのケース などが対象となります。 どの時点で実行するか?については各開発者が設計に適した場所で実装してください。
OS最小バージョン変更 今回使用したXcodeのiOSバージョンのターゲットが最小9.0でしたので iOSのバージョンを引きあげざるをえませんでした。 ※TARGETSのGeneralのVersionテキストボックスに直接入力してもダメぽかったので9.0にしました。 総務省で公開している2021年度データの比較用データを追加 ※総務省に問合わせをし、利用目的を説明し了解を得ております。 無断で総務省の公開データを使用しないよう、ご留意ください。
今後とも、abc3.meをよろしくお願いします。
by abc3.me
|
| | ESP TEST | AppStoreを開く | [ver 1.3] [修正概要] AdMobをWKWebViewを使用するSDKに対応しました。 [修正内容] iOS向けのGoogle Mobile Ads SDKに更新をしました。
| | 巫女うらない | AppStoreを開く | [ver 1.2] [修正概要] AdMobをWKWebViewを使用するSDKに対応しました。 [修正内容] iOS向けのGoogle Mobile Ads SDKに更新をしました。
| | おぼえる英単語 | AppStoreを開く | [ver 1.10] iPhone XS/XR画面の画面上部のレイアウトを修正しました。 AdMobをWKWebViewを使用するSDKに対応しました。 [修正概要] AdMobをWKWebViewを使用するSDKに対応しました。 [修正内容] iOS向けのGoogle Mobile Ads SDKに更新をしました。
| | ミニ脳トレ | AppStoreを開く | [ver 4.51] [修正概要] (1)ステータスバーの高さ iPhone XS/XR画面の画面上部のステータスバーの高さをiOS13.0以降と未満に分岐処理変更処理をしました。 (2)AdMob更新 AdMobをWKWebViewを使用するSDKに対応しました。 [修正内容] (修正例) (1)ステータスバーの高さ [iOS13.0以降] [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height; [iOS13.0未満] UIApplication.sharedApplication.statusBarFrame.size.height; (2)AdMob更新 AdMobをGoogle Mobile Ads SDK(WKWebViewを使用するSDK)に更新をしました。
|
| | ミニすごろく | AppStoreを開く | [ver 1.1] [修正概要] (1)ステータスバーの高さ iPhone XS/XR画面の画面上部のステータスバーの高さをiOS13.0以降と未満に分岐処理の変更をしました。 (2)AdMob更新 AdMobをWKWebViewを使用するSDKに対応しました。 [修正内容] (修正例) (1)ステータスバーの高さ [iOS13.0以降] [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height; [iOS13.0未満] UIApplication.sharedApplication.statusBarFrame.size.height; (2)AdMob更新 AdMobをGoogle Mobile Ads SDK(WKWebViewを使用するSDK)に更新をしました。
|
| | 給与レポート | AppStoreを開く | [ver 1.17] [修正概要] (1)ステータスバーの高さ iPhone XS/XR画面の画面上部のステータスバーの高さをiOS13.0以降と未満に分岐する処理に変更しました。 (2)AdMob更新 AdMobをWKWebViewを使用するSDKに対応しました。 [修正内容] (修正例) (1)ステータスバーの高さ [iOS13.0以降] [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height; [iOS13.0未満] UIApplication.sharedApplication.statusBarFrame.size.height; (2)AdMob更新 AdMobをGoogle Mobile Ads SDK(WKWebViewを使用するSDK)に更新をしました。
|
|
| Objective-Cのお知らせ | | ステータスバーの高さ取得について | [ステータスバーの高さの取得例] ※Xcode 11.5を使用したケース ※iOS 13.0以降を想定したケース
ヘッダの宣言 //UIApplicationを実行するためにUIKitを宣言します #import <UIKit/UIKit.h>
+(CGFloat)getStatusBarHeight;
モジュールの実装 +(CGFloat)getStatusBarHeight { CGFloat height = 0.0f; if (@available(iOS 13.0, *)) { //iOS 13.0以降のケース height = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager. statusBarFrame.size.height; } else { //iOS 13.0未満のケース height = UIApplication.sharedApplication.statusBarFrame.size.height; } return height; }
|
|
| AppStore申請について | | Info.plistのprivacy項目について | [NSBluetoothAlwaysUsageDescription] 上記項目はInfo.plistにある項目となります。 開発者様が作成されたアプリにprivacy項目を含む機能がある場合、その通知メッセージをユーザに表示することができる機能です。
iOSではユーザに通知をする場合、iOS側で用意したデフォルトメッセージを表示してくれますが、開発者側で用意したメッセージを表示するようにして欲しいようです。 そのため申請によっては通知メッセージを表示してくださるように、再提出の依頼がある可能性があります。
it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaining to the user how the app uses this data.
|
Bluetoothの機能を使用する可能性がある場合は、privacy項目に該当するため上記privacy項目を追加し、必要なメッセージを設定してください。 また、Bluetoothには次のprivacy項目があると思います。 [NSBluetoothPeripheralUsageDescription] 上記privacy項目はDeprecatedになっていました。
[参考ページ] 「NSBluetoothPeripheralUsageDescription」の記事を開く そのため、Bluetoothの機能を使用する可能性があるアプリを作成した場合は [NSBluetoothAlwaysUsageDescription] のprivacy項目をInfo.plistに設定して必要なメッセージを追加した方がいいと思います。
おそらくprivacy項目全般について、メッセージを追加していない場合等は、申請の際、再提出の依頼があるかもしれないため、見直しをした方がいいかもしれません。
Bluetoothのユーザ向けの通知
Info.plistには公開するアプリ固有のBluetoothの使用方法を明記し、ユーザに確認を取る必要があるようです。
ちなみに「What to use bluetooth」では、このアプリの使用目的を説明していないとしてダメでした。
[参考レビュー抜粋]
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
We noticed that your app requests the user’s consent to access their Bluetooth but does not clarify the use of the Bluetooth in the applicable purpose string.
|
|
| | App Storeプレビューで表示されるAppサポートのリンクで表示されるホームページにコンタクト情報について | [コンタクト情報について] ホームページにはコンタクト情報を表示する必要があるようです。 申請の際、Appサポートのリンクの表示ページにコンタクト情報がない場合はリジェクトの原因となります。 ユーザからのコンタクト情報がわかるように設置されている必要があるようです。
[参考レビュー抜粋]
1. 5 Safety: Developer Information 5. 1.1 Legal: Privacy - Data Collection and Storage
Guideline 1.5 - Safety - Developer Information
The support URL specified in your app’s metadata, (ホームページのURL), does not properly navigate to the intended destination. Specifically, it do not contain contact info.
Next Steps
To resolve this issue, please revise your app’s support URL to ensure it directs users to a webpage with support information.
|
|
| Xcodeのビルドエラー | | [エラー] Command CodeSign failed with a nonzero exit code | [事象] ビルドをしたとき、次のエラーが発生しました。 ※Xcode10.1でビルドをしていたプロジェクトを11.5でビルドしたときに発生。CodeSign /(パス)/Build/Products/Debug-iphonesimulator/(プロジェクト名).app (in target '(プロジェクト名)' from project '(プロジェクト名)') cd (パス) export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
Signing Identity: "-"
/usr/bin/codesign --force --sign - --entitlements /(パス)等
/(パス)等/Promises-LICENSE
Command CodeSign failed with a nonzero exit code
| [実行した対策] Automatically manage signingのチェックを外し、個別に設定し、ビルドする。
下記はバックアップを取った後に実行することをお勧めします。
Signingのエラーだったため、Xcodeで作成したプロジェクトがサインインできるプロジェクトかどうか? を焦点とし、次の操作をしたところ、私のケースでは上記が解消されました。 ※既存のXcodeで作成したプロジェクトのビルドエラーについてとなります。 サインインに成功していたプロジェクトですが、Xcodeのバージョンをあげたところプロジェクトが認証可能状態にないため、このエラーが発生していることが考えられます。 また、Apple Developer Programのプロビジョニングファイル情報の更新処理のタイミングのケースにも影響が考えられます。
1.「Download Manual Profiles」を最新にする Xcodeのメニューバーにある Xcode → Preferences...を選択 AccountsタブのDownload Manual Profilesを実行し最新の状態を取得します。
2. SigningをAutoにしている場合は個別に設定してみる (1) Distributionの追加 PROJECTのInfoタブにConfigurationsがあります。 そこで「+」ボタンでDistributionは追加できます。 ReleaseにDistributionを含めるのがよくある手法と思いますが、個別に追加してみました。
(2) Autoのチェックを外し、個別に認証を設定 TARGETSの「Signing & Capabilities」タブを選択します。 Xcodeが以前の情報を参照している可能性があるため、認証をAutomatically manage signingにしている場合は ・ Debug ・ Release ・ Distribution を個別に設定しました。 (1) Team (2) Provisoning Profile この時、Signing Certificateはキーチェーンで設定されている現在使用するために登録したキーチェーンのIDになっていること。
クリーン(Shift + Comand + k)をした後、ビルドしました。
テストした環境では個別のビルドが成功した後、Automatically manage signingに戻してもビルドが成功しました。 ※entitlementsファイルが生成されていないケースでも成功したので、一概にentitlementsの有無とは言えないかもしれません。
Xcodeが認証判定処理に使用する設定ファイル等の情報をクリアするなどの処理が必要なケースがあるため、この方法で解決するとは限りません。 以外の方法として、下記の記事を紹介します。
[参考ページ] 「fastlaneでcodesignに失敗する場合」の記事を開く [参考ページ] 「command/usr/bin/codesign failed with exit code 1- code sign error」の記事を開く [参考ページ] 「Xcode: codesignのunknown errorは本当にわけがわからないよ」の記事を開く [参考ページ] 「iOSアプリ開発でのキャッシュ削除方法まとめ」の記事を開く |
|
| みなさんへのお知らせ |
[ミニ脳トレ]「いなかったのは誰?」を追加しました。今後ともよろしくお願いします。 |
著作権情報 | 本ホームページに掲載されている情報等については、いかなる保証もいたしません。 本ホームページを通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、本ホームページを利用したいかなる理由によっての障害等が発生しても、 その結果本ホームページを利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |
|
|
|