Change before you have to.

androidアプリ開発、iosアプリ開発、rails、deep learning .etc.を使った社会実験。

とある海外掲示板での雑談〜xcodeのframework設定について〜

今回はちょっと大人の事情で横道にそれますが。

 

 

ゲーム開発と並行して、将来的に課金アイテムとか作るためフレームワークの導入について調べていました。

GPS機能を使うならCoreLocation.framework

課金アイテムを使うならStoreKit.framework

広告を使うならAdSupport.framework

SNSログインを使うならSocial.framework

サウンドエフェクト、BGMを出すならAVFoundation.framework, AudioToolBolx.framework

とかいろいろ挙げたらきりがないんですが、これらが必要らしいことが分かりました。

 

そして、どうやらフレームワークの設定方法には「オプショナル」と「リクイヤード」の2種類があることが分かりました。

その違いについてこちらのサイトが参考になったので軽くまとめてみました。

OSが多少古い情報ですが、議論してる内容は今の状態でも使えることなのでまとめてみました。

 

 

※なお翻訳文は正確性よりもニュアンスでざっくり性を重視してます。

 

カッコの文章は私の想像ですw

 

【質問】

I set Storekit.framework from 'Required' to 'Optional' since the last update, then I found the IAP sales is zero today.

I want to ask that does this possibly caused by setting storekit.framework to optional? 

最近の更新でstorekitフレームワークをリクワイヤードからオプショナルに設定したとたん、今日の課金アイテムの販売がゼロになりました。

確認したいのですが、storekitフレームワークをオプショナルにしたことが原因と考えられますか?

 

(回答者現る)

Optional means your app could theoretically run on an older ios version before StoreKit was available. But if you aren't checking for it in your code before attempting to use it, then the app would just crash if it didn't exist. Otherwise, you shouldn't see any different behavior. 

オプショナルとはアプリが、storekitフレームワーク利用可能なバージョン以前であっても論理的に(正しく)動作することができるということを示している(そういう風に宣言しているようなものだ)。

しかし、もし(プログラムが)フレームワークを使用する前にコード側でそのチェックがされていない場合で、かつその判定がない場合クラッシュします。 

 

 

(質問者煮え切らない)

So even set it to 'Optional', this should not affect the IAP sales, right?

If I set it to 'Required', does it mean the whole app can't run on iOS 5.1?

それで、オプショナルに設定しても課金アイテムの売上には影響しないということでおk?

もしリクワイヤードに設定したら、iOS5.1では全てのアプリが起動しないということ?

 

(回答者大人の対応で少し噛み砕く)

Let's say StoreKit was first available in iOS 3.0 (I don't know the actual version). If you have it as Required, then no one with below 3.0 could install the app. But if it's Optional, then others could download it, but you would need to check at runtime whether or not it was available.  

まずStorekitがiOS3.0から動作したとします(実際のバージョンは分かりません)。

この場合もしリクワイヤードに設定したら、3.0未満のユーザーはインストールできません。

でももしオプショナルなら誰でもダウンロードできます。でもその場合、実行時に利用可能かどうかチェックする必要があります。

 

 

(略:とある他のフレームワークの推奨についての議論が続く。

 

 

(真打ち登場!)

My understanding on optional vs required is. If your app absolutely needs a framework in order to work such as Foundation then you mark it as required because without it the app would not function. But if your app uses a non essential framework such as iAd framework then you have it as optional because not having iAds will not effect it's use ability. However if your app really must have the iAd framework you mark it as required. And but set the minimum target iOS to one that supports that framework.

If you try to support and iOS version that is too low for a framework then have it optional but have conditional code to prevent using it unless user is on correct iOS 

 

リクワイヤードとオプショナルの違いについて私の意見です。

もし(導入しようとしているフレームワークが)Foundationのようにそのアプリで絶対に必要である場合、リクワイヤードにすべき。

なぜならそれがなければアプリは動作しないから。

でももしそのフレームワークが(例えばiAdフレームワークのように)アプリにとって絶対必要ではないなら、オプショナルにすべき。

なぜならそれがなくてもアプリは動作できるから。

しかし、iAdがあなたのアプリに絶対に必要であるなら、iAdフレームワークをリクワイヤードにして、その上でアプリの使用可能OSを(フレームワークがサポートできるバージョンに)設定すべき。

もしアプリの(が動作すると)想定されるiOSのバージョンがそのフレームワークよりも低いバージョンなら、

フレームワークの設定をオプショナルにした上で

・ユーザー端末のOSが正しくない場合にそのフレームワークが動作しないようにコーディングする

必要がある。

 

 

 

結論というか感想。

アプリ上で必要なフレームワークを導入した場合、それはリクワイヤードにすべき。

※その場合、他のフレームワークで絶対に必要でなくてもオプショナルにせずに、リクワイヤードのままにしておくべき。

 

 

リクワイヤード(Required):絶対に必要なフレームワークであることを示す。

オプショナル(Optional):アプリ内で使用しているが、なくてもよいことを示す。

 

 

例えば、StoreKit.frameworkは課金アイテムの購入に必要なので

Requiredにしておくべきかと。 

例え、それが他のライブラリ(例えばレビュー推奨ライブラリAppirator等)で必要であり、「導入したらoptionalに設定して下さい」という指示があっても

optionalに設定せずにRequiredに設定しておくべき。 

そうしないと課金アイテムの購入ができなくなってしまうから。

 

あとはAdSupport.frameworkは広告を使う場合に必要ですが、

ユーザーにとって絶対に必要ではないのでOptionalでよろしいかと。