2014年2月20日木曜日

Xcodeプロジェクトで、他端末でheaderファイルのリンクなしエラーが発生した時の解決方法

Xcodeプロジェクトを他人と共有していると発生するかもしれない問題です。

Xcode > Build Settings の「Framework Search Paths」と「Library Search Paths」に追加されているパス名が絶対パスになっている事が原因である可能性が高いです。
解決方法は、2つの項目ともにダブルクリックして編集状態にし、絶対パスになっている箇所を以下のように修正していきます。

例)
/Users/hyoromo/project/iOS/TamaPinByun/TamaPinByun/libs/hoge
  ↓
$(SRCROOT)/TamaPinByun/libs/hoge

上記の方法が面倒くさくて一時的解決をお望みの場合、エラー発生端末側でエラーファイルを追加し直しすればビルド出来る状態になります。

2014年2月18日火曜日

Cocos2d-iphoneを使った際にGameCenterでクラッシュする問題について

Cocos2d-iphone 2.1 を使用しているアプリで、Game Centerを使って以下のフローを実施した際にクラッシュします。
  1. GKGameCenterViewController を表示(Leaderboardの表示)
  2. アプリをサスペンド状態にする
原因は Cococs2d-iphone のメインコントローラが CCDirector なので、Cocos2d-iphoneフレームワークの各所ではそれ前提で処理が記述されているから。
解決方法は以下のようになります。

AppController.m
-(void) applicationDidEnterBackground:(UIApplication*)application
{
    if([navController_ visibleViewController] == director_) {
        [director_ stopAnimation];
    } else {
        [navController_ dismissViewControllerAnimated:NO completion:nil];
        [director_ stopAnimation];
    }
}

2014年1月24日金曜日

Foundationフレームワークの記法

 それほど目新しい内容ではありませんが、昔からiOS開発に携わっている方ほど無駄なコードを書くのに慣れてしまっているかと思いますので、比較的よく使うもののみまとめてみました。

NSString
→@"hoge"
NSStringについては昔からこれですね。UTF-16。
余談ですが、NSStringにもstringByAppendStringという連結メソッドがありますが、これは元のインスタンスを一度破棄し、新たにメモリを確保するため、連発するとパフォーマンスが劣化します。
文字連結を行う際は必ずMutableで行いましょう。


NSNumber
→@(1)
ついつい、[NSNumber numberWithInt:1]とか書いてしまいますが、intもfloatもこの記法でNumber化できます。


NSArray
→@[@"a",@"b"@"c"]
ARCのない時代を過ごしてきた人は[NSArray array]だけでautorelease書かなくていいんだ!なんて素敵!なんて思った時代もあったかもしれませんが、今や@[]だけでOKです。

NSDictionary
→@{@"key" : @"value", @"key2" : @"value2"}
こちらもArrayと同じような記法ですね。
余談ですが、NSMutableDictionaryの値のセットメソッドとして、setObject:forKeyとsetValue:forKeyがありますが、後者の方はnilを受け付けてくれます。
というか、受け付けてkeyごと消してしまいます。
前者の方はnilが設定されるとクラッシュするので、ケースバイケースで使い分けるといいですね。

他にも@propertyの@synthesizeが省略可能になったりとか、コンパイラが進化するごとにコーディングの記法も2、3年前と比べて大きく変わりました。
たまにしか使用しないコードはともかく、頻繁に使用するような上記のクラスに関する記法は新しくなるたびに習熟していく方が、手間はかかっても結果的にコストダウンに繋がると思います。

というわけで新しい記法が出たら積極的に覚えて慣れていきましょう!
今回は以上ですー。



iOSアプリ向けライブラリの探し方

iOSアプリ向けのライブラリを探す時、Cocoa Controls サイトで探すと楽です。でも、探し方が悪いと目的の機能を持ったライブラリは見つけ難いです。本エントリーはそんな人向けに簡単な探し方フローを書いています。

2014年1月9日木曜日

2014年1月8日水曜日

iOSアプリの多言語対応サポートアプリ「Linguan」の使い方

多言語対応する際、Xcode上で行うのは凄く大変&翻訳漏れをしてしまいがちです。そんな時にApp Storeで公開されているMac OS X向けアプリ「Linguan」を使うと楽に行えます。
Linguan
カテゴリ: 開発ツール, ユーティリティ


2013年12月28日土曜日

iOSアプリ申請時に "This bundle is invalid. Apps that include an armv7s architecture are required to include an armv7 architecture" エラーが発生した時の対処法

XcodeのOrganizerでiOS申請した時に "This bundle is invalid. Apps that include an armv7s architecture are required to include an armv7 architecture" が発生した場合、PCにUSB接続しているiPhoneやiPadを全て外してXcodeで「iOS Devices」を選択してからArchiveすれば解決!するかもしれません。