カテゴリー別アーカイブ: アプリ作成関連

有料アプリやアプリ内課金を使われている人は注意

本日2015年10月1日にアップルから届いたメールによると、日本の税法が変わったのでAppStoreの日本での売り上げ分について、日本の消費税法に照らし合わせて申告や納税が必要になるみたいです。

有料アプリやアプリ内課金がある物をリリースしている方は少額だとしても、一度税理士さんなどに相談したほうがいいでしょう。

iPhoneアプリを新規で登録するときに準備する物

iPhoneアプリを登録するときに必須なんだけど忘れがちな事をメモ。
(すべてではありません)

  • アプリ名
  • Copyright(著作権表示)
  • アイコン画像(iTunes登録用)JPEG/PNG
     1024×1024(以前は512 x 512)
  • スクリーンショット JPEG/PNG
    iPhone必須(Retina画質)
     3.5″縦 640 x 920 / 640 x 960
     3.5″横 960 x 600 / 960 x 640
     4″縦 640 x 1096 / 640 x 1136
     4″横 1136 x 600 / 1136 x 640
    オプション
     4.7″縦 750 x 1334
     4.7″横 1334 x 750
     5.5″縦 1242 x 2208
     5.5″横 2208 x 1242
    iPad必須(Retinaじゃなくても可)
     縦 768 x 1004 / 768 x 1024 / 1536 x 2008 / 1536 x 2048
     横 1024 x 748 / 1024 x 768 / 2048 x 1496 / 2048 x 1536

これ以外にアプリを作るときに必要なのは小さなアイコンと起動イメージ。

  • アプリアイコン PNG
    iOS7,8   120 x 120(必須) 180 x 180
    iOS6.1以前 114 x 114(Retina用)57 x 57
  • LaunchImage
    iOS7,8   640 x 960 & 640 x 1136(必須)
          (320 x 460も入れられる)
iOS4の頃のアイコン指定方法(infoへの直接追加)
Icon file(CFBundleIconFile)に57×57のPNGファイル名を入れる。
 <key>CFBundleIconFile</key>
 <string>logo57.png</string>
iOS5,6,7の頃の指定方法
57×57と114×114、120×120を入れる(iOS4〜7に対応させる場合)
 <key>CFBundleIconFile</key>
 <string>logo57.png</string>
 <key>CFBundleIconFiles</key>
 <array>
  <string>logo57.png</string>
  <string>logo114.png</string>
  <string>icon60.png</string>
  <string>icon60@2x.png</string>
 </array>
 <key>CFBundleIcons</key>
 <dict>
  <key>CFBundlePrimaryIcon</key>
  <dict>
   <key>CFBundleIconFiles</key>
   <array>
    <string>logo57.png</string>
    <string>logo114.png</string>
    <string>logo60@2x.png</string>
   </array>
   <key>UIPrerenderedIcon</key>
   <false/>
  </dict>
 </dict>
CFBundleIconFilesに入っているicon60.png、icon60@2x.pngの指定はいらないのかも。

iOSでSQLite3を使う方法 TSSqlite

この方のライブラリが個人的には使いやすかったので紹介。
ライセンスはMIT。
ソース公開なので何かあっても自分でなんとかできるのがおすすめ。
素敵なライブラリをありがとうございます。

TSSqlite[9wick Documents]

以前はここに書かれているサンプル通りで動いたのですが現在は動きません。
原因はKey-Value Coding (KVC)がうまく動かないため。
探し方が悪いらしく解決策を見つけられなかったので少し特殊な方法で解決しました。
もっといい方法があるよって方はお教えください。

問題はモデルクラスの作り方です。
サンプルでは
#import <Foundation/Foundation.h>
#import “TSSqlite.h”
@interface AppBook : TSModel
@property (retain,nonatomic) NSNumber *indexNo;
@property (retain,nonatomic) NSString *name;
@property (retain,nonatomic) NSString *author;
@property (retain,nonatomic) NSNumber *year;
@end

#import “AppBook.h”
@implementation AppBook
@dynamic indexNo;
@dynamic name;
@dynamic author;
@dynamic year;
@end

この様に定義するのですがこのままだと
AppBook *appBook;
NSLog(@”index=%i”, appBook.indexNo);
のように参照するとKVCが働かず、@dynamic indexNo;で作られたインスタンスを表示してしまいいつも0やnullになってしまいます。

これを次の様に継承定義すると一応使える様になるのでこれでごまかしていますw

#import <Foundation/Foundation.h>
#import “TSSqlite.h”
@interface OrgAppBook : TSModel
@property (retain,nonatomic) NSNumber *indexNo;
@property (retain,nonatomic) NSString *name;
@property (retain,nonatomic) NSString *author;
@property (retain,nonatomic) NSNumber *year;
@end

#import “OrgAppBook.h”
@implementation OrgAppBook
@dynamic indexNo;
@dynamic name;
@dynamic author;
@dynamic year;
@end

#import “OrgAppBook.h”
@interface AppBook : OrgAppBook
@end

#import “AppBook.h”
@implementation AppBook
@end

難しい定義には向かないけどCoreDataを使うほどではない場合に有効だと思います。

iOS4.2.1 でパスコード(数字4桁)入力後にアプリが終了する問題

1Password Proというアプリで起きている問題なのですが自分の作ったアプリでも起きましたw
他にもいくつかのアプリで起きているのでiOS4.2.1のバグだと思われます。
とりあえず対処した方法をご紹介。

Interface Builder でUITextFieldのSecureチェックを外すだけ。

私のアプリ(女性向け予定表)ではテンキーパッドに隠れる位置にUITextFieldをおいて
– (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
このdelegateを使って一文字ずつチェックしながら黒丸を表示させているため、secureがなくても問題が無いので外しました。

エラーに関係すると思われる手順
1、[navigationController pushViewController: animated:]で画面を移す
2、secure付きUITextFieldで入力
3、NSUserDefaultsで値を追加、削除
4、[navigationController popViewControllerAnimated:];で画面を戻る

もし同様の問題で困っている方は参考まで。

2011.1.11追記
私がバグじゃないかと思ってるだけでAppleがバグと認めたわけではありませんのでご注意ください。何か仕様が変わって使い方を間違えてるだけかもしれません。

Team Provisioning Profile: * の期限切れ更新

いつからかわかりませんが自分で作らなくてもXcodeが自動的に「Development Provisioning Profile」を作ってくれるようになりました。
In App Purchaseを使わないのであれば自動的にできたProfileでぜんぜん困らないのでそのまま使っていたのですが先日期限切れに。更新しようと「renew」を押そうとするのですが押せないし、Xcodeは不具合が起きたので問い合わせしろというし。

ですが、先ほどやっと解決。
期限切れになったProfileをiOS Provisioning Portalから削除してXcodeのオーガナイザでRefreshするだけ。

ちゃんとドキュメントを読めばどこかに書いてあるのだと思いますが同症状で困っている人が居るかもしれないので書いてみました。

いつの間にか4.2もそろそろリリースされるみたいだし、もう一台iPadがほしい今日この頃です。