スポンサーサイト

--/--/--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
comment (-) @ スポンサー広告

[Swift] SpriteKit SKSceneからpresentViewControllerを使う方法

2015/07/30
SpriteKitから、presentViewControllerを使用することは通常では難しいようだ。
理由はSKSceneが、UIViewControllerを既に継承しているらしく、
多重継承になってしまうかららしい。
(既に継承しているはずなのに、使えないのはどういうことなのか詳しくは私には謎・・・)

まあそのせいで、SpriteKitから、
presentViewControllerを呼び出すのが難しく、そのせいで
ダイアログを出したり、ツイッターやFacebookを使ったりするのが簡単にはいかなくなるようだ。

ネットで色々調べると、presentViewControllerを使用せずに使う方法を模索している情報が多いが、
そんな
中、最もシンプルなやり方をとっている情報があったので書き留めたい。

SKSceneと言えど、Viewの最も最前面にはUIViewContollerが存在しており、
それを取得してきて、そこから使用するというもの。


var currentViewController : UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController!
currentViewController?.presentViewController(・・・・・・・)



これだけで取得できる。
すごい。


たとえばダイアログなら、以下のようにすぐに使用できる。

let alertController0 = UIAlertController(title: "確認", message: "すべてのデータを初期化しますか?", preferredStyle: .Alert)
let otherAction0 = UIAlertAction(title: "Yes", style: .Default) {
    action in println("初期化しました")
}
let cancelAction0 = UIAlertAction(title: "No", style: .Cancel) {
action in println("やめました")
}
alertController0.addAction(otherAction0)
alertController0.addAction(cancelAction0)

var currentViewController : UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController!
currentViewController?.presentViewController(alertController0, animated: true, completion: nil)
スポンサーサイト
comment (0) @ tips

[Swift] シーン変更によるクラスの持続と破棄・インスタンスの持続と破棄

2015/07/23
まず、クラスの概念について、私はまだ完全に理解していません。
というか、ほとんど分かっていません。

というかクラスをどんな風に利用するのが適切なのかが、
分かっていないんだと思います。

しかし、それでも手探りに利用しているわけですが、
そのせいで、様々な不具合のような現象に出くわします。

1、SpriteKitのSKシーン切り替え時に、クラスやインスタンスはどのように残ったり、自動破棄されたりするのか。

現在のSwiftでは、クラスは参照元がなくなると自動破棄されるようです。
そのため、SKシーンを切り替えたりすれば、SKシーンのインスタンスが破棄されるため、
それによってクラスは自動消滅し、データ等を自分で破棄したりする必要がないとのことらしいのですが、
しかし、実際にはものすごくクラスが残っていたりするかもしれません。

たとえばSpriteKitにあるSKNodeですが、
シーン表示させているクラス内で作成したNodeを、
異なる二つの別クラスに、それぞれのインスタンス時に受け渡したケースで、

このNodeは、シーン切り替え3回目あたりで、突然表示されなくなるという
怪奇現象に出くわしました。

私がクラスを理解していないので、完全にあてずっぽうですが、
多分、二つ以上の別クラスに、メインクラスのnode等を受け渡した場合、
メインクラスのシーンを切り替えても、
その二つの別クラスのインスタンスは破棄されずに残っているんだと予想します。

この二つの別クラスは、メインクラスからインスタンス化しているので、
メインクラスが破棄されれば、自動的に参照元を失うはずなのですが、なぜか残り続けます。

こういうのは、多分そうじゃないかなーと警戒していても、
扱うクラスやインスタンスやnodeが膨大になればなるほど、
絶対に知らないうちに発生することだと思うのですが・・・。

なので、偶然発見できればいいのですが、もし発見できなかった場合は、
致命的なクラッシュバグ等として残ることになる非常に危険なものだと思います。


2、クラス内タイマーは残る。

NSTimer というタイマーがありますが、
これをクラス内で使用すると、個別に稼働するタイマーとなり非常に便利になります。
しかしこのタイマー、SKシーンが切り替わろうが、インスタンス元を破棄しようが、ずっと動き続けているようです。

なのでクラス内でタイマーを走らせる場合、
シーン切り替え時などには、
インスタンスしたクラス全てに対し、タイマーを止めるメソッドを実行してやらねばなりません。


・・・とまあ、今の所気づいただけでこのような重大な要素があるので、
きっとまだまだありそうです。

そして、これらのインスタンスがずっと残り続けると、
SKシーンの切り替えを行うたびに、それらが不要に重複し、思わぬ不具合を引き起こす原因となりそうです。


■ 対策 ■

SKシーン切り替え時には、SKシーンや各クラスに、

Dinit{
   println (" class名 end!! ")
}

の一文を挿入する。

これで、一応そのクラスのインスタンスが完全に破棄されたかどうかが判明します。

破棄されていないとしたら、私の場合の多くは、

・そのクラス内で使用しているNSTimerが破棄できていない。
  or
・そのクラス内で宣言したSKNodeを、2つ以上の別クラスに参照させている。

の2つが多いです。
前者は、シーン切り替え前に、NSTimerを終了させればOKですが、
後者は見落とす可能性が高いです。
対策としては、なるべくSKNodeを参照させる場合、個別にSKNodeを作って参照させ、
共有を避けるということくらいでしょうか。


最後に、
これらを一切考慮せずに済む方法は、
私の思いつく限りだと、SKシーンの切り替えはせずに、
表示させるシーンは常に1つに固定するという手法でしょうか。

そして画面遷移は、自分で全ての描画を管理することで、
シーン切り替えを利用せずに、自前で行えば、
シーンのクラスを呼び出すのは一度だけとなり、
再インスタンス化するというケースを排除できます。
そうなれば、クラスやインスタンスの不要な持続や破棄をいちいち考えずに済むではと予想します。


クラスを使用すると、
様々なものを個別に管理でき、
また再利用もできるのでとても便利です。

でも、予期しないことがあまりに多すぎて、
そういう対処に、大半の時間を持って行かれている感じです。

こんなことなら、
クラスは最低限の使用にとどめ、
その他全てを自分で構築した一つのループの中で回す方が、
何倍も開発速度が上がりそうです。

インスタンスが破棄されずに残っていることが一目でわかるようなシステムや、
そういうケースが発生した場合には警告で教えてくれたりすれば、まだいいのですが、
そんなことも一切ないし・・。

とまあ、時代に逆行したようなことを言ってみましたが、
個人で全てをやっているので、他人との共有管理を予定する必要がないし、
また一方、予期しない問題が発生すると個人では対応できない可能性が高いという点からも、
ひとりでゲーム開発なんかをやっている人には、
この辺、本当にめんどうな問題だと思います。


UIKitをSpriteKitと一緒に導入した時に、あまりにUIKitの仕様に手こずった時にも思いましたが、
UIにしても、こういう便利だと提示されがちなプログラム要素にしても、
私の場合は、0から自分で作った方が、結局早いし便利だったりするのが、
なんだか個人的に時代とマッチしていない感じがして、いつもちょっと寂しいです。
comment (0) @ エラー

[ダウンロード数] スマホゲームレビューサイトに載った翌日。

2015/07/22
さて、公開から5日ほどで、DL数が13件ほどだった私の処女作は、
ありがたいことに、なぜか2箇所のスマホゲームレビューサイトで取り上げて頂いておりましたが、
その翌日の今日、ダウンロード数をみると、

13件 → 37件

と、約20件ほど増加しておりました。

さて、
昨日の数字なども合わせて考えると、
私の作品の内容がしょぼいからだという要素を含めても、
数年前から巷で耳にするようになった
スマホゲームにおけるジャパニーズドリームですが、
そんなものはとっくに地に落ちている・・・のかもしれません。

例えば、
今、どこにも告知せずに、ネット上のフリーゲーム登録サイトである「ふりーむ」に、
内容の全くない作品をアップロードしたとしても、
5日間のダウンロード件数はこの数字を簡単に上回りそうです。

また、ネット上だとかつて登録サイトとしてアクセス数の多かったVECTORが、
昨今では利用者が激減したのか、
ほとんどダウンロードされない状況になっていますが、
今回のiPhoneゲームにおけるダウンロード数は、
その今のVECTORの水準に近いでしょう。

しかしappストアのユーザー数が激減するはずはないので、
つまりは、iPhoneのappストアのシステム自体が、
現在のユーザーからのアクセスに対し、
非常に寡占的な構造になっているということかもしれません。
(まあ、あの見たままのシステムでは、こうなるのは必然でしょうが)

ふりーむに登録した方が、まだ数字が伸びそうと思われる点は、
ふりーむには新着リストというものが存在しており、
それが正しく機能しているからでしょう。
そのおかげで、内容がどんな作品であれ、必ず初期においては、ある程度の人目に触れるという平等性が少なくとも担保されています。
 (appストアにも新着ランキングのようなものがありますが、
 通常ランキングのページと同じ見栄えですね)

ふりーむに登録する内容を問わないゲームよりもダウンロード数が劣ってしまうなら、
スマホでゲームを制作し公開する意味は、かなり薄くなるかもしれません。

こうなってくると、
もはやappストア自体は、ただの大手appを宣伝するだけの広告媒体ということになってくるので、
appストアへのSEO対策は無意味且つ、それ以外のアプローチが必要になってきそうです。

例えば、存在するのかどうかはまだ調べてないのでわかりませんが、
スマホユーザー向けの、
新着作品における周知能力の高いスマホゲームの登録サイトなどがあれば、
そこへ登録するのが重要かもしれません。
(ただ第一感、PCブラウザ環境でもないので、そんなものを一般スマホユーザーが閲覧しているとも思えないのですが。
コアなスマホゲームユーザー?みたいな人がいるならいいのですが、そんな人はスマホゲームよりPCゲームをしてそうだし……)

確かにPCゲームも、ただ作って自分のサイトに載せただけでは、
認知ゼロの状態からダウンロードされる回数はほぼ0に近くになるものではあります。
(悲しいかな、appストア自体が、個人の無名サイトと同レベル・・・という風に見た方が、ダウンロードされる機会という意味では本質的かも・・・)

さて、この辺はゲームとは全く異なる問題ですので、
今後の大きな課題の一つになりそうです。

しかしこの時点でこのダウンロード数なら、
もはやappストアの有能性もスマホフロンティアも、そんなものは存在しない、と鼻から無視して、
自己満足で色々とやる方が健全かもしれません。
comment (0) @ 未分類

[iPhoneゲーム公開] 申請通った。公開後3日の状況。SEO対策は全く無意味?

2015/07/21
ちょっと数日すぎましたが、2回のリジェクトを経て申請が通りました。
2回ともリジェクトに対する予想と対応は合致していたようです。

まとめると
1回目
 ・広告識別子IFADの質問に、iAdしか使っていないのに、yesと答えてしまっていた
 ・iPad Airだけに発生するエラー

2回目
 ・広告が配置できない
  →iTunes connect内のiAd watchrunch→ iAd Networkの登録がまだだった。

でした。
2回目は、登録して、登録しましたけど、このことでしょうか? と返信すると、10分後くらいには申請完了になっていました。
そこからは72時間待って、AppStoreに公開されました。

さて、AppStore公開にあたっては、前もっていろいろとApp情報を登録しているわけですが、
その辺は、申請時におけるネット情報を見ると、どこもかしこも、
「SEO対策はしっかりしろ、さもないと、誰もDLしない」というようなことが書かれているので、
なるべくそれらのサイトに書かれている通り、詐欺まがいなキーワードを設定したり、
説明文を書いたり、スクリーショットを選んだりしました。

そして、公開から3日くらいが経ちました。

3日経って、状況を見てみると・・・・

DL数 13
閲覧数 150


うん、ネットに転がっているSEO対策なんて、全く無意味だと感じました。
一切キーワードを載せないのと同レベルです。


試しにAppStoreで、登録したキーワードで検索すると、確かに自分のAppがでてきます。
しかし、トレンドなキーワードを設定したところで、
当然ながらそれらのキーワードをみんな付けているわけで、
結果、大手Appが上位を独占していて、そんな所に新規個人が同じ手法で仕掛けても、
遥か下の方に表示されるだけで、誰もそこまで見ません。

ただ、自分しか付けていないようなキーワードなら、当然一番上に自分のAppが表示されます。
しかし、そんなのキーワードは誰も検索しないからこそ、自分しか付けていないことになります。

つまりSEO対策としては、
あらかじめ大手Appと競争できる広告なり認知度なりがあるApp公開においては重要でしょうが、
それ以外では、考慮の必要性はないと言ってもいいかもしれません。

そんなトレンドキーワードを狙うより、
誰も検索しないかもしれないが、自分のAppの概要や特徴を正しく表すカテゴリキーワードを正確につけるので十分であると、今回感じました。

そしてもう一つ、
ネット情報だと、
予め用意できるものとして、DL数に影響するのは、だいたい以下のことが重要である、という風に出てきます。

1、ICON画像
2、スクリーンショットと説明文

しかし、これもおそらく、大手App以外は、無関係と言ってもいいレベルかもしれません。

確かに、ICON画像は目をひかせられなければ、クリックされないわけですが、
その必要性が出てくる状況というのが、スマホの場合、

"ずらずらーと大手Appが並ぶ、その最初の数ページに、自分のAppが並んだ時"

・・・という、その時点で非常に類まれなる状況の時だけでしょう。

通常のPC閲覧でのネットでは、1ページに表示されるサムネイル数が多くなるため、
この状況は比較的生まれやすいでしょうが、
スマホだと、その数は激減しますし、
ユーザーも2ページ以降を見る機会は、ブラウザに比べ遥かに低いと思われます。
そうなってくると、ずらずらとICONが並ぶ所を閲覧してもらう機会は、
大手以外ほとんどないかもしれません。

つまり、このICON画像等も、
キーワード設定と同様に、なにもないのと同レベルということになってしまいます。

むしろ、ICONもキーワードも、自分の好きなように個性的で奔放なものを用意する方が、
新規個人開発者にとっては有利かもしれません。

なぜなら、こうした現在の状況において、
私のような新規の個人開発者が作ったAppが、検索されて目に入るケースというのは、
もはや、
「ニッチ」なケースだけになるだろうと考えられるからです。

そして、ニッチ層のユーザーは、当然ながらトレンドキーワードではなく、
誰も登録していないような個性的キーワードの先に潜在します。
ある一定以上キーワードが認知されれば、それはもはやニッチではなくなるので、すぐさま大手の新しい餌食になるからです。
というわけで、好き勝手なキーワードの方が、まだ誰も開拓されていないニッチに偶然突き当たる確率は上になります。

またそのようなニッチユーザーに偶然閲覧されたとした場合、
彼らは当然ながらトレンドとは全く無関係、むしろ逆方向なユーザーの可能性が高いです。
すると、そんな彼らは、トレンド的な目を引くようなICONだと、逆効果である可能性が多分に出てきます。
むしろ、なんだこの変なICONは・・・というような個性的ICONの方が、彼らは気に入るかもしれません。
そもそもニッチキーワードで閲覧されている状況では、ライバルAppはほとんど表示されていない状況なわけですから、他にAppも表示されていないのに、わざわざ目を引くようなICONである必要性はないわけです。


というわけで、
私のような状況の場合は、
ネットで氾濫しているようなSEO対策とは全く逆行するスタイルが、本当の意味でSEO対策になる、ということかもしれません。

ちなみに、
iAdの解析で見てみると、内2件くらいは中国や台湾でDLされているようです。

また、私は今回あえて、App公開のことをこのブログでしか書いていません。
その上このブログでも、App名はまだ伏せています。
そうすることで、初動のDL数等の数字を純粋化し、
現在のスマホゲームにおける状況というのをできるだけ正確に認識できます。


さて、上記は全て私の個人的見解なので、当たっているか外れているかは全くわかりませんが、
それとはまた別に、今日ネットを巡回していると、
私のAppが、2箇所のスマホゲームのレビューサイトで紹介されているのを発見しました。

その2つのレビューサイトの管理人はすごいですね。
なぜなら、昨日までのDL数はまだ一桁でした。今でも13件です。
そんな状況のAppなのに、よく見つけたな・・・と感心します。
新着のゲームだけでも相当な数があるはずで、そんな中から一桁ほどのDL数しかないアプリを見つけ出すのは、かなり難しそうです。


というわけで、もしネットのスマホゲームレビューサイトに掲載されたら、
その影響度がどれくらいなのか、というのが今日のDL数の増加数から判明しそうです。


さて、現在は2作目を開発中ですが、
2作目公開時点あたりで、このブログでも私のAppを公開したいと思っています。
このブログのアクセス数からすると、ほとんど無意味かもしれませんがw
comment (1) @ ゲーム公開

[Swift Tips] 文字列検索と、文字列分割と、node内サーチ

2015/07/16
今日は、文字列検索と、文字列を特定の文字で分割するための関数を作っていました。
optionalとかは適当にしてます

■文字列検索

func pos(target_s:String,s:String) -> Int {

var i:Int = (s0 as NSString).rangeOfString(target_s).location

return i
}


■文字列長さ取得

func length(s:String) -> Int {
var i : Int = (s as NSString).length
return i
}


■文字列分割
s を bunkatu_s で分割し、c番目の文字列を取得
ex: str = "ab,cd"
str2 = bunkatu(str,",",1)
→cd

func bunkatu(s:String,bunkatu_s:String,c:Int) -> String {

var sx = s
var s0 = ""
var s1 = ""

var i2 = c
if c >= 1 { i2 = c-1 }

for var i1=0; i1<=i2; i1++ {
var i_pos0:Int = pos(bunkatu_s,sx)
if i_pos0 >= 0 {
var i_start_index = advance(sx.startIndex, 0)
var i_end_index = advance(sx.startIndex, i_pos0)
s0 = sx.substringFromIndex(i_start_index).substringToIndex(i_end_index)

var i_end_index2 = advance(sx.startIndex, i_pos0+(bunkatu_s as NSString).length)
s1 = sx.substringFromIndex(i_end_index2)
sx = s1
} else {
return ""
}
}

if c == 0 { return s0 } else {return s1}
}


■node内にある特定のnodeを、nameや型でサーチ

func search_label_node(i_label_name:String,i_node:SKNode) -> SKLabelNode{
var j = SKLabelNode()
for i in i_node.children{
if (i is SKLabelNode) && (i.name == i_label_name) {
j = i as! SKLabelNode
}
}
return j
}
comment (0) @ tips

[2回目のリジェクト] iTunes Connect [iAd]

2015/07/15
2回目のリジェクトになりました。

Information Needed

We began the review of your app but are not able to continue because we need additional information about your app. Your iTunes Connect settings indicate that your app serves advertisements but we were unable to locate ads in your app.

- Please reply to this message to provide the steps for locating ads in your app.



メタデータの却下とあります。
しかし、リジェクト理由のナンバーが振られておらず、情報が必要とだけあります。

広告を配置できないので、情報求む。
ということでしょうか。

広告配置のための手順を示して欲しいというのは、ちょっと意味が曖昧でわかりません。
広告を確認できなかったので、手順を・・・というのなら、広告がどこに表示するのか分からない・・・という意味になりますが、今回のは、向こう側が広告を配置できなかったということのようです。

そもそも確認以前に配置ができないので、そのための手順を教えて欲しいということでしょうか。

そんなんそっちの仕様だろ・・・、配置できない原因くらいそっちで分かるだろうに・・・。

と心の中で少し思いましたが、Appleの社員は全員、グローバル展開しておきながらグローバルサポートをする気はないハゲタカロボットだと認識すると全て腑に落ちるので、そのように認識して、とりあえずネットで調べました。

しかし、このリジェクトメッセージでいくら検索しても、
ほとんど同じものがヒットしない・・・

IFADに関することばかりヒットします。今回のはそっちではないと思うので。

とりあえずメタデータ却下とあるので、アプリ情報に不足があるのかと思いiAd関連の情報で調べると、iAdに関するアプリごとの設定項目 set sbout iAds info みたなのがあるというようなページをいくつも見かけました。

しかし、全て古いスクリーショットばかり。
今の新しいiTunes Connectにはそんな項目はない・・・・。

そこでiTunes Connect 内のiAdのアイコンをクリックしてみると・・・
全部英語で意味わからん・・・

ネットで検索すると、以前はヒットしなかった、この英語ばかりのページについての記事発見。
iAdのレポートを管理するページのようだけど、
まだ一度も私がアクセスしていなかったようで、同意を求められたので、承諾。

この同意がなかったせいで、広告を配置できなかった・・・と彼らは言っているのだろうか・・・?

でもここは単にiAdレポートの管理だけのページのようにも思えるし・・・。

とりあえず全く意味不明なので、
英語で聞き返すしかないが、あんたの言ってること意味不明です、と言えばいいのだろうか。
それで意味がわかる回答があるとは到底思え無い。

そもそもこのメッセージには、追加情報が必要とある。
なんの追加情報なのかについては、曖昧な表現だから意味が分から無い。

何の情報が必要かもう少し具体的に詳しく教えて下さい、と書けばいいだろうか。

でもこういうロボット相手に質問しても無意味な気がする。
有効と思える回答例をいくつか箇条書きにする方がいいかもしれない。ロボットはそういうのが理解しやすいはずだ笑


1.
I failed to notice about iAd network,"Monetise without compromise" in iAd workbemch.
was this problem?
->
I checked it thie time. then I agreed it .

or
2.My app info in iTunes Connect is not enough? or
3.You need how to find ads bunner in my app? or
4.Something else


---------------------
具体的にどのような追加情報を必要とされているのか分かりませんでした。
しかし、色々調べてみると
iTunes Connect内にあるiAd workbenchからのiAd Networkを同意していませんでした。
これが問題だったのでしょうか。
これなら今回、確認し、同意しました。

もしこれ以外に不足している情報などがあればお教えください。


念のため、詳しい内容は日本語で追加しておいて返信してみる。

そして返信してみると・・・
I failed to notice about iAd network,"Monetise without compromise" in iAd workbemch. was this problem? -> I checked it thie time. then I agreed it . If there is a problem on the other... 1.My app info about ads in iTunes Connect is not enough? or 2.You need how to find ads bunner in my app? or 3.Something else --------------------- 具体的にどのような追加情報を必要とされているのか分かりませんでした。 しかし、色々調べてみると iTunes Connect内にあるiAd workbenchからのiAd Networkを同意していませんでした。 これが問題だったのでしょうか。 これなら今回、確認し、同意しました。 もしこれ以外に不足している情報などがあればお教えください。

はい、改行されませんでした!!!!!!

XCODE使っててもそうだけど、
macって、改行コードめんどくさい・・・
たぶん、日本語使った時におかしくなる。


・・・さて、今回で2度目のリジェクトでしたが、
リジェクト対応自体は、別に事務的でそれはそれで謎解きやってるみたいで楽しいんだけど、

この作業をやっていると、もうゲーム自体がどうでもよくなってくる。
ゲームに対する熱意とかモチベーションとかとは、別次元の対応だから、そうなるのは当然かもしれない。

小説書きあげたあとに、校正からゲラ戻ってきて、校正の人との事務的な作業をやっている時の感覚に近いものがある。
そういう時も、それを続けているとだんだん小説の中身がどうでもよくなってくることがあった。

こういうことって、多分、作品の本質の一部をある程度にコストにしないと、クオリティはあげられないっていう現実面なんだと思うんだけど、大きな組織やシステムがあるなら、そういう所を改善したらもっといい次元になるんじゃないかなーって思う。


というわけで、すっかりこのゲームに対する熱意がリジェクトたった2回で冷めたのでw
どうでもよくなってきたので、次のゲームを作ろうと思います。

こういう流れだと、
どうせまたリジェクト作業だろ・・・という前提の創作になりますよね。

つまり、リジェクト作業をやってモチベーションが失われてもOKな作品しか作らなくなりそうだ。

comment (0) @ 未分類

iphoneアプリ再申請作業

2015/07/08
というわけで無事、再申請作業を完了した。

今後のため、気づいたことなどを色々書き残しておこうと思う。

まず、
申請の際のチェックリスト に追加したいことは以下

・iphoneアプリであっても、iPadのすべてのシミュレーターで確認した方がいい。
・アーカイブ作成時は、[PRODUCT]→[Scheme]→[Edit scheme]で、releaseビルドにする。
・iAdだけなら、申請時の質問で、広告識別子を使用していますかの質問にNoと答える。


そして、再申請の際の手順だが、
ネットで見受けられるものは、ちょっとだけ情報が古いようだ。

再申請の際の手順・2015最新バージョン
0、却下済みとなったappページを開き、問題箇所を修正しアーカイブを提出。

1、itunes connect のapp管理ページへ

2、古い情報にある「新しいverを・・・」などという項目はなくなっているようなので?
  情報の欄の、バージョンの項目を、自分で1.0→1.1という風に書き換える。
  このバージョンはXCODEのprojectのgeneralの項目でも、アーカイブ作成前に一致させておくこと。
  またbuildの項目も、前回の数字と異なる数字を入れる必要がある。
  例:
   version 1.0 → 1.1
   build 1 → 2

3、ビルドの項目で、却下済みとなっている旧ビルドを、赤いマイナスアイコンを押して削除。
  すると、「+」アイコンが出現する(アーカイブ送信直後だと表示されないので、少し待つ)
  「+」を押して、新しいビルド項目を選択。

4、審査に提出ボタンを押し、質問に答え、完了。
comment (0) @ 申請

linker command failed with exit code 1 / file too small (length=0) エラー

2015/07/08
再申請時に、初めてReleaseビルドの存在を知りました。
ビルドにはデバッグ用のDebugビルドが通常行われ、配信時用のReleaseビルドとは結果が異なることがあるというもの。
だから、アーカイブ提出時には、Releaseビルドのものを提出した方がいいらしい。

そこで[Product]の、[Scheme]から[Edit Scheme]を選び、Releaseビルドを選択して、
アーカイブを提出した。

しかし、そのあと少し気になって、もう一度ビルドして見ると、
いきなり、

Apple Mach-O Linker Error
linker command failed with exit code 1 (use -v to see invocation)
file too small (length=0)

という見たこともないエラーが。

はうあ!?

まさかDebugビルドでは発見できなかったエラーか!?と焦り、
色々調べたが、
よく考えれば、アーカイブ提出用のReleaseビルド時にはなんのエラーも出なかったわけで・・・

調べると、

「command + shift + k しろ!!!」という記事を発見。

つまり、クリーンのことだが、
どうやら何かのはずみでビルドが中断された時に、一部のファイルが0bytesのまま出力されてしまったことなどが原因のようだ。

クリーンしてみると、あっさりビルド成功。

なんなんだ・・・

Apple相手だと、こういう開発環境やツール側の不出来な部分のせいで時間を食うことが9割のような気がしてきた。
comment (0) @ エラー

[UIKit] UIRectのcornerRadiusのエラー iPadのみ

2015/07/08
エラー

Assertion failed: (corner_height >= 0 && 2 * corner_height <= CGRectGetHeight(rect)),

申請していたアプリのリジェクトの理由の一つのiPadで動作しないというものについて、
シミュレーターで試してみたら、iPad Airだけでクラッシュが起きた。
他のiPadでは正常に作動。

エラー箇所は上記の通り。

何やら、コーナリングの大きさの問題だったようだ。
要約すると、コーナリングの高さが、シェイプの高さの半分より大きくなってしまって困った、というものだろう。

そりゃ困るだろうが、他の実機でもシミュレーターでも、その辺はうまくやっているのに・・・なぜおまえだけ・・・

とある実機だけ例外みたいな、こういうのやめてくれませんか・・・。
全部エラーにするか、全部OKにするかしてほしい・・・・。

というわけで、ここを直して終了。

再申請してきます・・・。

なんか、拍子抜けするほど簡単なリジェクト内容でした。
一瞬、リジェクトメっセージをみたときは、その英語の淡々とした内容に、パニックになりかけましたが、
そうならそうとなぜひとこと言ってくれないのか、と思いたくなるような簡単なことでした。
comment (0) @ エラー

アプリ申請、リジェクトきました。2.10 iPad / PLA 3.3.12 広告識別子

2015/07/08
9日目にしてようやく審査待ちが終わりましたが、
予想通りリジェクトでした。

原因は2つで、

1、
2.10 - iPhone Apps must also run on iPad without modification, at iPhone resolution, and at 2X iPhone 3GS resolution

2、
PLA 3.3.12
Also, we found that your app uses the iOS Advertising Identifier but does not include ad functionality. This does not comply with the terms of the iOS Developer Program License Agreement, as required by the App Store Review Guidelines.


1は、iPadでうごかんよ、というもののようです。
2は、広告があるみたいだけど、広告が機能してないよ、というもののようです。


まず第一感、思い当たる節がないので、????になります。
まあ、思い当たる節があるなら、自分でとっくに直しているでしょうけども。

とりあえず全く分からないので、ネットで情報収集します。

・ADBannerViewを抜いたらiPadでも起動した、という記事を発見。
 Universalにして、NativeなiPad状態にすると正しく起動するのでそれで申請したとありました。
 ・・・どういうことなんだろう・・・

・info.plistの「CFCundleIcons~ipad」にチェックが入ってるからかも、という記事を発見。
 ここにチェックを入れると、iPadでも動くよ、的なことだと思うのですが、
 チェックなしでもiPadで動かないから、同じ現象になるかもしれないので、ちょっとケースが違うかも?

とりあえず、あとでもう少しじっくり調べてします。

そして問題なのは、2つめ。
広告機能の不在。

iAdを入れているのは事実だけど、それなのに機能しないとは、これいかに……。

ネットで調べてみると、結構出てきました。


1、Google Analytics SDKを使用している場合、その内部で広告フレームワークが使用されていることが問題となるケース
 →今回は使ってないのでは関係なさそう。ちなみにこれは、SDKのverをあげれば不使用で実装できるようですが。

2、海外の設定だと広告が出ないのかも?→スクリーンショットを取って、広告あるやん、と抗議する。
 →そ、そんな低次元のことなのだろうか……
 →調べてみると、広告あるやんと抗議した人のサイトを発見。
  すると、その方は抗議しても同じ理由でリジェクトされ、最後にスクリーンショットを貼って再抗議すると、審査に通ったようです。
  なんじゃそら……。

 Please look at the screen shot.
 I have display ads definitely like this.
 Please try the examination again.

 スクリーンショットを見てください。
 このように間違いなく広告を表示しています。
 もう一度審査をやり直してください。


 >参考サイト

3、iAdはAdSupport.frameworkを使用していないから、該当しないという記事を発見
 →え!!!???
 →広告識別子は、AdSupport.frameworkによって使用されているようだけど、iAdが使用していないなら、私のはいったい……

4、info.plistの「Localization native development region」が、「English」になっていると、ダメなことがあるらしいという記事
 リージョンを「Japan」にかえると、よいらしい。
 これはいったいどういうことなんだろうか……。まあ多分、日本向け広告が入っている場合は、これが問題になるのだろう。
 私の場合はiADだけなので、今の所は無関係だとは思うのですが・・・

 >参考サイト

5、【 iAdは、フレームワークどころか、 広告識別子すら使用していない 】という衝撃の記事を発見!!!!
 なんじゃそらああああああああ。

 アプリは申請時に、

 Advertising Identifier
 Does this app use the Advertising Identifier (IDFA)?

 という質問をされます。
 かくいう私も、広告を使用していますか?的な質問かと思い yes と答えたのですが、
 広告識別子を使用していますか? というかなり狭義の意味で、しかも、iAdは広告識別子を使用していないとなると、
 iAdしか使用していないなら、ここでは No と答えなければ、リジェクト対象となることが原因のようでした。

  >参考サイト

というわけで、こっちは申請時の問題のようだったので、
iPadでの動作だけ確認して再申請することにします。

comment (0) @ 申請

とりあえず最初のゲームを作って残った問題点

2015/07/05
結構どうでもいいことや、個人的な偏見なんかを含んだことを勝手気ままに書いているので、あまり参考にならないかもしませんが。


・Object-Cを勉強しなきゃやっぱダメかも。

 Swiftで始めたものの、ネット上で見つかるほとんどはまだまだObject-C。Object-Cで書かれた文章を読んで、こーかなあーかなと試行錯誤しながらSwiftに直して試しています。
 また、現状SpriteKitで作っていますが、これではiphoneアプリは作れてもAndroidは作れません。やはりCocos2Dとかを使ったほうがいいのかもしれないですが、Cocos2DはSwiftに対応してまだ間も無い?のか、ほとんどネットで資料もないという状況です。
 とりあえず今はまだiphoneだけで手一杯ではあるのですが。

・アプリの名前のローカライズで、いくらやってもアプリ名を変更できなかったこと。

 これだけは最後までわかりませんでした。ちゃんとローカライズの手順を踏んでもアプリが英語表記のまま。ネットで色々調べるとクリーンをすればいいとか、一度アプリを消してビルドし直すといいとか、Appファイルとか全て消すとかでてきたので、全て試しましたが、ダメでした。結局最初からある大元のPlistで自分でDisplay nameを追加して、そこに日本語で記入しました。でもこれだと、英語でのローカライズがアプリ名に多分反映されないと思う・・・。ネットでも、どうやってもできませんでした、という書き込みを見つけましたが、その人も解決できていませんでした。この辺、XCODEのverupに伴う仕様変更なんかとも深く関わっていそうで、その辺がネックになっているのだろうか。
(それにしても、macのソフトなんかのネット情報って、本当windowsと比べると少ないですね・・・。出てくるのは外国のサイトばっかりだし・・・。)

・インターフェースの問題。

 SpriteKitを土台にして作っているのですが、インターフェース周りは、学習の意味も込めて、一部をUIViewで作りました。
 しかし、UIViewは既存のテンプレートを使うだけならいいのですが、色々カスタマイズしようとすると、結構壁にぶち当たりました。
 例えばTableViewCellからModalへ遷移し、もどってきた時に反応が遅いとか、Modalの遷移アニメーションを自分で変更しようとするのが凄い大変だとか・・・。
 またAutoLayoutでのエラーも毎度かなり時間をくわされます。
 この辺のことを考えると、UIViewを利用するより、SpriteKitで自分でインターフェースを自作した方が、いくらでもカスタマイズもできるし良さそうな気がしました。ただ、ゼロから作らなければならないのは、最初は結構しんどいかもしれないですが・・・。

・画像のRatio?のこと

 @2をつけるとiphone6のサイズ用・・・とかいうのが、バカみたいなことだと思うのですが、私にはしっくりきませんでした。
 それぞれデバイス用に画像を用意するという意味はわかるのですが、その必要性がまず、個人的感覚として感じられません。まあそれは私だけの感覚だとして、次に、そうしたそれぞれの画像の用意が、絶対にしなければならないことなのか、もし一部しかしなければ、他のデバイスではどうなるのか、などといった基本的な仕様の結果というのが、購入した3冊の参考書にも書かれておらず、ネットでの大雑把なことしか触れていない所などしかなく、今でもわからないままです。
 とりあえずゲームで仕様する画像は適当なサイズで制作したものを、全て@3の枠に登録し、アプリアイコンなどの画像はそれぞれのサイズを用意しました。どうして@3の枠に登録したのかというと、@1や@2に登録するより、FPSに対する負荷がなぜか軽かったからです。なぜ軽いのかも私にはわかりません。
 ゲーム中に使用する画像は、たとえば16x16のドット絵だったりします。そんなドット絵に@1も@2もクソもないのに・・・というのが私の基本的な感覚なので、この辺がしっくりきていないのだと思います。もちろんタイトルに使用する画像とかなら、それぞれを用意した方がいいのでしょうけど、それすら、私の感覚だと、そんなもんは勝手にトリミングすりゃいいじゃん、どうせ肉眼で分かるようなレベルじゃないだろうし、という感じです・・・。まあこの辺は私が無神経なだけなのでしょうが。

・アプリ全体に蔓延している「こうしなければダウンロードされない」というような価値観が、まるで常識のように扱われていることに対する気持ち悪さ

 例えばネットを歩けば、アフィリエイトサイトとかにも出会いますが、そういう所ではSEO対策なんかが非常に重要視されていて、アフィリエイターがそれらに心血を注いでいるのは分かりますが、あんまりいい感じはしません。だって半分詐欺みたいなもんじゃん・・・って思うからです。
 しかし、アプリ開発周辺においても、それと似たような空気が通念化しているような印象を受けました。なんだか、アプリのゲーム開発に対して抱いていた私のイメージが、少し潔白過ぎたのかもしれません。でも、そういうのを感じて、あー、だから巷でよく見るアプリって、どれも整形でもしたみたいに似たり寄ったりで、また気持ち悪い美しさや謳い文句を纏ってるんだ・・・、と腑にも落ちました。実際、そうした方向性のアプリの方が、ユーザーの目に留まりやすいというのが、統計的に出ているからなのでしょう。
 そういうのは個人的には、なるべく無視して開発を進めたい所です。なぜならやる気がなくなるからです。私がやりたいのは、究極的にはビジネスではなく、創作だからでしょう。

・コーディングとビルドの遅さの問題点

 XCODEは、コードが短いうちはいいですが、ちょっと長くなるとすぐにとても重くなるようです。その度に色々クリーンしたりしてなんとか軽くしようとしているのですが、それでも重く感じられます。
 ゲームというジャンルを制作する場合は、どうしても、コードで書いてすぐにそれをプレーして確認という作業を何万回と繰り返す必要があると思うのですが、そういう所で少しの重さが大きなネックになります。
 ネットでは、色々と軽くする方法は書かれていますが、どれも根本的には解決から遠いものばかりです。(ただでさえ、macのOSのインターフェースがwindowsよりももっさりしていて遅いというのに・・・。)
 この辺、今後の大きな課題の一つです。
comment (-) @ 未分類

はじめてのアプリ

2015/07/05
2015年6月にローンでmacbook Airを買い、
XCODEでSwiftとSpriteKitを手探りで用いて、7月に入る前にゲームを1本作り、申請に出しました。

提出して一週間ですが、まだ申請待ちです。

今後、アプリを作りながら、気づいた点や書き残したい点などがあれば、タイトルから引けるようなページにしたいと思います。
comment (-) @ 未分類

新しく生まれ変わりました

2015/07/05
新しく生まれ変わりました。

こんご、ここは私の勉強ブログになります。
comment (-) @ 未分類
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。