4回目のリジェクト

やっぱり擬似ギャンブルという事でリジェクト

ギャンブルでなくするために、ポイントをリセットできるようにしてみた。

結果、やっぱりダメ。

ギャンブルゲームは認定された企業アカウントでないとうけつけられない。

どこかの企業に売り込むか?

こんなマイナーなゲームは儲からないからダメだろな。

 

諦めて、違うプログラムをつくるかな。

3回目のリジェクト

ギャンブルにチェックを入れたら、1回目と同じメッセージのリジェクト。

返信でギャンブルじゃ無いでしょって送ったけれど、答えられないって。

仕方がないから、Appチームへアピールっていうところに、Google翻訳したメッセージを送ってみた。

メールで

こんにちは、

アプリレビューボードに連絡して、アプリのレビューに対する申し立てをリクエストしていただきありがとうございます。

ご提供いただいた情報を確認し、異議申し立ての結果をできるだけ早くお知らせします。

宜しくお願いします、

App Review Board

という返事が帰ってきた。

現金を扱わない、App内課金も使わない、現金、物品、その他いかなるものにも交換できないのでギャンブルじゃないって送ったけれど、擬似ギャンブルもダメだって。

擬似ギャンブルって何?

その辺りが明確になってくれるといいんだけれど・・・

HELP ビューの作成

アプリ本体からHELPボタンを押すとHELP画面が表示されて、戻るボタンを押すと元に戻るというのを作ってみる。

File>New>File... から SwiftUI VIEW を選んで、ファイル名はHelpView(別になんでもいい)

できたファイルをこんなふうにしてみる

import SwiftUI

 

struct HelpView: View {

    @Binding var helpFlg : Bool

    

    let helpText = """

HELPのテキスト

いっぱい書いて

横にどれだけ広がってくれるのかを試すために長い文章を書いてみる。

 

おこう

"""

    

    var body: some View {

        ZStack {

            Color.white

            VStack {

                Text("HELP").font(.headline)

                ScrollView {

                    Text(helpText)

                }

                Spacer()

                Button(" ←戻る "){

                    self.helpFlg = false

                }

                .padding(5)

                .background(Color.gray)

                    .foregroundColor(.white)

                .clipShape(Capsule())

                .frame(maxWidth: .infinity, alignment: .topLeading)

 

            }

        }

    }

}

 

いっぱい盛り込んだ。

@Binding var helpFlg : Bool

これは親のVIEWでhelpflgがtrueならこのビューを表示し、このビューでボタンを押すと親ビューで表示を消すための変数。

 

    let helpText = """

HELPのテキスト

いっぱい書いて

横にどれだけ広がってくれるのかを試すために長い文章を書いてみる。

 

おこう

"""

 

HELPに表示するテキストを """   """ ダブルコーテーション3つで囲むとテキスト内の改行も許される。このテキストは実行中に変更されることはないので let で宣言。

        ZStack {

            Color.white

            VStack {

 

Color.white は白で塗りつぶし。これをZStackで以下のViewと重ね書きする。

塗りつぶしておかないと、親VIEWの画像と重なってしまう。

                Text("HELP").font(.headline)

                ScrollView {

                    Text(helpText)

                }

最初のTextはタイトル表示。フォントも指定している。

その次、ScrollView はテキストが長かったときに画面スワイプでスクロールしてくれる。

そしてText(helpText) で実際のテキストを表示。

                Spacer()

                Button(" ←戻る "){

                    self.helpFlg = false

                }

                .padding(5)

                .background(Color.gray)

                    .foregroundColor(.white)

                .clipShape(Capsule())

                .frame(maxWidth: .infinity, alignment: .topLeading)

 Spacer() を置いて、ボタンが一番下に表示されるよう

                Button(" ←戻る "){

                    self.helpFlg = false

                }

 

ボタンとしてテキストを使っているのだけど、そこに表示されるテキストと、

ボタンを押した時のアクション。helpFlagをfalseにしてるだけ。

その下に続くのはボタンの装飾

.padding(5)

これがないとテキストギリギリに枠ができる。数値で隙間調整。

.background(Color.gray)

背景色指定。

.foregroundColor(.white)

文字色指定

.clipShape(Capsule())

文字を囲む枠の設定

.frame(maxWidth: .infinity, alignment: .topLeading)

ボタンを画面の左に表示するという設定。topは与えられた枠の上部、Leadingは左詰め。

Spacerで下詰めにしているから、 .leading でもよかった。

 

で、Viewをこんなふうに作ると、PreViewで HelpFlg がないよ〜というエラーになる。

@State var helpflg = true

で変数を宣言してやればいいのだけれど、PreViewで変数を宣言するとこれまた怒られる。

PreViewなんていらないなら、

// HelpView()

Text("HELP VIEW")

として誤魔化すのが簡単。

でも、やっぱりプレビューも見たいよねってときは、

struct helpWrap: View {

    @State var helpflg = true

    var body: some View{

        HelpView(helpFlg: $helpflg)

    }

}

とやって、HelpViewを呼び出すビューを作っておいて、

struct HelpView_Previews: PreviewProvider {

    static var previews: some View {

//        HelpView()

        helpWrap()

    }

}

プレビューからはこっちを呼び出す。

 

親ビューからHelpView w呼び出すときも

    @State var helpflg = true

の宣言と、

HelpView(helpFlg: $helpflg)

のように引数指定が必要。

 

親ビューに表示するボタンは

          Button(" HELP "){

                    self.helpflg = true

                }

                .padding(5)

                .background(Color.gray)

                    .foregroundColor(.white)

                .clipShape(Capsule())

                .frame(maxWidth: .infinity, alignment: .topLeading)

戻るボタンと同じところに表示しておくと、わかりやすいかも。

 

Apple Store Connect Media Manager

AppleStoreConnectにUPするスクリーンショットの問題は解決したのだけれど、サポートが教えてくれるメディアマネージャーというのが見当たらない。

違う画面を見てるのだろうか?

スクリーンショットは送ったのだけれど。

その画面にたどり着くまでの動画を送れってことで、画面動画の保存方法まで教えてもらって、動画を送ることが出来た。

最初、スクリーンショットをメール添付で送ったのだけれど、それが見られなかったものと思って、スクリーンショットを送ると、それは既に見ていたらしい。

→メールでスクリーンショットは送れる。

容量が大きいファイルはメール添付できないので、サポートに大きなファイルを送るURLの連絡がきた。

画面動画の保存方法も教えてもらったのでメモ

command+Shift+5

これでスクリーンショットも動画も保存できる。

教えてもらったサイトはこちら

Mac で画面を収録する方法 - Apple サポート

 

追加のお知らせがきた。

Safariを全画面にしてくださいと。左のブックマーク表示も消して、できるだけ画面を大きくして。

ブックマークも非表示にして引き伸ばしたけれど表示しない。

もしやと思い、Safariを左に送って画面からはみ出させて、さらに右に拡大してみたら

おー、出てきた、メディアマネージャー!

なんてこったい

2回目のリジェクト 擬似ギャンブル

1回目のリジェクトで、スクリーンショットにでも広告が表示されていたのを、広告部分マスクして再挑戦。これはこれでOKだった。

もう1点、擬似ギャンブルに関して個人アカウントではダメだっていうので、擬似ギャンブルのチェックを外しておいたのだけど、今回はそこが問題になった。

応答では「擬似ギャンブルの極度、頻繁にチェックを入れなさい」で帰ってきたので、再度このチェックを入れて、申請に出した。

ギャンブルといっても、金銭の授受があるわけでなし、App内課金があるわけでもなし、

ゲームに勝つとポイントが増えて、負けるとポイントが下がる、シューティングゲームと変わらないと思うんだけど。

さらにそのポイントを何かと交換できるわけでもなし、他人とポイント交換できるわけでもなし。

 

ま、次の応答を見て対応を考えよう。

 

ん?よく見てみると、「ここを修正して返信してね。続けて審査してあげる」って書いてある。通ってくれますように。

 

AppleDeveloper へもどうすればいいか、問い合わせ中

・・・アカウントの登録と管理をサポートする部署 のため、問題解決センターで問い合わせをしてくださいとの返事でした

 

 

1回目のリジェクト

とりあえずゲームが完成したので、審査に提出したら、2日でリジェクトの通知がきた。

理由は2つ

1.スクリーンショットに広告のデモが表示されている。

アプリまたはそのスクリーンショットにテスト広告が含まれていることがわかりました。テストまたはデモ目的の機能を含むアプリまたはメタデータアイテムは、App Storeには適していません。

 

本番の広告にするのか?

AppStoreに出されている他のアプリを見てみると

画像をずらして広告部分が表示されないようになってる。

うーん、とりあえず広告部分をマスクしてみよう。

 

2.ギャンブルアプリを許可しなくなりました。

擬似ギャンブルもダメみたい。

で、

カテゴリのカジノを外して、

年齢制限のところで擬似ギャンブルのチェックを外した。

単なるカードゲームだってことで。

 

これで再提出。どう判断されるのかな。

Unable to infer complex closure return type; add explicit type to disambiguate

自作のClassをいじってたら、ZStackに Unable to infer complex closure return type; add explicit type to disambiguate というエラーが表示された。

いじる前は正常に表示されていたので、ZStackそのものに問題はないはず。

実際、Classの方にエラーがあり、これを修正するとZStack側のエラーも消える。

Class側のエラーを全て修正したのに、1個だけZStackにこのエラーが残っている。

なんなんだ?

XーCodeの Product>Build を実行したら、エラーは消えて、正常に実行されるようになった。

 

教訓

ZStackにエラーが出るときは、その中のVIEWにエラーが出ていることがある。

エラーを修正してもエラーが表示されるときは、Buildしてみる。 

 

結局なんのエラーかよくわかんないけれど、VIEWとして不完全なものがあるよ ってことかな。