スティーブ・ジョブズによってiPhoneが発表されてからもう10年以上が経つ。
最初のiPhoneにはAppleが開発したアプリしかインストールできず、AppStoreという概念はなかった。
それからすぐにAppStoreがリリースされ、誰でも開発者登録をすれば世界中のiPhoneユーザーに自分の作ったアプリを使ってもらえるようになった。
私がアプリを作り出したのはAppStoreがリリースされてからおよそ2年後の2010年の秋ごろだった。
そこまで早く参入したわけでもなかったのだけれど、当時は今より圧倒的に情報が少なく、かつ開発手順も複雑だったので、「iPhoneアプリを作っている」という人はプログラマーの中でもかなり稀だった。
その黎明期にiPhoneアプリ開発というものに参加できたのは本当に運がよかったと思うし、そういった場をくれたAppleには感謝しかない。
あれから時間が経ち、リリースしたアプリが20本を超えたが、今はほとんど新規アプリをリリースしていない。
ここでちょっとiPhoneアプリのあれこれを振り返ってみようと思う。
続きを読む
AdMobが何やら新しくなった。
前回ガラっと変わったのは確か2012年とかそのあたりで、AdSenseとシステムが統合されたためリニューアルと同時に単価が激しく上昇していた記憶がある。
今回のリニューアルでは単価の上昇とかはなくて、FireBaseを本格的に使ってもらうためのものだと思われる。
なお、いつ出来たのかは知らないが、広告のユニットID以外に下記のような感じに「アプリID」をAppDelegate内で指定する必要があるようす。
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Initialize Google Mobile Ads SDK
// Sample AdMob app ID: ca-app-pub-3940256099942544~1458002511
[GADMobileAds configureWithApplicationID:@"YOUR_ADMOB_APP_ID"];
return YES;
}
@end
詳しくはAdMobのGet Startedを参照してください。
そういえば以前は本番の広告ユニットIDを指定するとテスト環境でも広告が表示されたが、今は表示されないみたいです。
なので、テスト環境ではAdMobが指定するテスト用広告IDを設定してね、ということらしい。インプレッション広告とかもあるから不正な収益が発生してしまうからでしょうね。
iPadアプリを申請したらいきなりitunes connectでエラーが発生。
どうやらiPad Proの12.9インチ版スクリーンショットが必須になったらしい。ということはつまり、iPadアプリではiPad Proで動くことが必須になったということですね。
といってもiPad Proの解像度(2048×2732)なんて意識して作っていなかったので、どうしましょ、iPhoneアプリをiPadで起動すると自動で引き伸ばしてくれるように、なんとか引き伸ばして表示させる方法はないだろうかと調べたところ、ありました。
従来のソフトのままでiPad Proの画面に対応する方法
iPad Proが広すぎるため、取り急ぎ今までのアプリと同じサイズで対応しておきたい
Launch Screen Fileを設定しなければよい
Launch Screen Fileを設定する箇所を白紙にしておけばよいようです。大変助かりました。
引き伸ばしたスクリーンショットをitunes connectで設定して実際に申請したところ、問題なく「Ready for Sale」になりました。よかったよかった。
iPhoneでは5.5インチ、4.7インチ、4インチ、3.5インチと様々な解像度対応が必要で大変ですが、どの機種も一般のユーザーが使う解像度なので対応必須は当然だと思っています。しかし、個人的にはiPad Proは一般ユースとはちょっと違うんじゃないかな〜と感じていて、対応必須というのはちょっと厳しいような気がします。
Xcodeやitunes connectで、12.9インチ対応するかどうかをチェックボックスで選択できたりしたら分かりやすいんですけどね。
私もしばらくはこのLaunch Screen Fileを白紙にする方法で対応したいと思います。
NSDataReadingMappedIfSafeがiOS8でdeprecatedになってしまった。
こちらがNSDataReadingMappedIfSafeを使ったもの
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"caf"];
NSData *buffer = [NSData dataWithContentsOfMappedFile:path];
これを下記に変更する。
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"caf"];
NSData *buffer = [NSData dataWithContentsOfFile:path
options:NSDataReadingMappedIfSafe
error:nil];
オプションのところは「NSDataReadingMappedIfSafe」と「NSDataReadingUncached」と「NSDataReadingMappedAlways」から選ぶ。
どういう違いかはあまり調べてないが、ここに書いてある。
http://samplecodebank.blogspot.jp/2013/06/NSData-NSDataReadingMappedIfSafe-example.html