【iOS】便利なオープンソースライブラリ

Android も FirefoxOS も TizenOS も UbuntuTouch も Linux そんな時代なんですね。
今回はiOS開発で使った事のある OSSライブラリ の紹介です。また Objectice-C のデリゲートの基本的な使い方を書きます。

便利なオープンソースライブラリ

facebook風なサイドビュー

facebookのような人気アプリと似たUIはユーザに受け入れられやすいので使いやすいです。
iPhone-P-Open
JWNavigationController

折り紙のようなアナログ感のあるサイドビュー

独特なアナログ感のある動きかつ軽量な所が好きです。
リンク先に動画があるので動きはそちらで確認してください。
UIView+Origami

カスタムモーダルビュー

画面全体を覆わないモーダルビューです。表示時のアクションもいい感じです。
UAModalPanel
UAModalPanel

JSONライブラリ

サーバとの通信時によくお世話になるJSONフレームワークです。
まあ、Apple公式のJSONフレームワークもありますけど…
SBJson

Delegateの基本的な使い方

AppDelegate

AppDelegateのプロパティをViewControllerから参照しグローバル変数のように扱います。
(主要箇所以外は省略しています)

// AppDelegate.h
@property int globalCounter;

// AppDelegate.m
@synthesize globalCounter;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.globalCounter = 5;
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

// ViewController.h
#import "AppDelegate.h"

// ViewController.m
-(void)referAppDelegate{
    AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    NSLog(@"Reference from AppDelegate %d",appDelegate.globalCounter);
}

コンソールにReference from AppDelegate 5 と表示されます。

MyDelegate

自作のDelegateクラスを作ると任意のタイミングでデータの受け渡しができます。
(主要箇所以外は省略しています)

// sampleDelegate.h
@class sampleDelegate;

@protocol smpDelegate 
-(void)didFinishMethod:(sampleDelegate*)smp;
@end

@interface sampleDelegate : NSObject{
    id  delegate;
}

@property (nonatomic, retain) id delegate;
@property int counter;

-(void)countNumber;

// sampleDelegate.m
@synthesize delegate;

-(void)countNumber{
    self.counter = 10;
    [self.delegate didFinishMethod:self];
}

// ViewController.h
#import "sampleDelegate.h"
@interface ViewController : UIViewController

// ViewController.m
- (void)viewDidLoad
{
    sampleDelegate *smp = [[sampleDelegate alloc]init];
    [smp setDelegate:self];
    [smp countNumber];
    
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
}

-(void)didFinishMethod:(sampleDelegate*)smp{
    NSLog(@"didFinishMethod : %d",smp.counter);
}

console に didFinishMethod : 10 と表示されます。
objective-cのselfへの理解がポイントだと思います。

プロパティリストの小ネタ

plistはXML形式とバイナリ形式をサポートしています。
XMLはバイナリに対して冗長ではありますが可読性は高いです。
plistの編集は一歩間違うと読み込めなくなるので、以下の文法チェックコマンドを用いると便利です。

$ plutil  -lint  *.plist

XCode4.x系で「Developer Tools Accessはデバッグを続けるためにほかの..」の解決

コンソールで以下のコマンドで解決します。

$ sudo dscl . append /Groups/_developer GroupMembership  [ユーザ名]

UserInterfaceState.xcuserstatのgitignore

XCodeのGUIリポジトリ管理ツールを使っている場合, .gitignore に記述するだけではダメみたいです。

$ git rm --cached CatCode.xcodeproj/***.xcworkspace/xcuserdata/***.xcuserdatad/UserInterfaceState.xcuserstate
rm 

以上を commit すれば OK です。