トップ «前の日記(2012-07-25) 最新 次の日記(2012-07-30)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|

2012-07-29 [iOS]アプリケーション間通信

独自スキームとクリップボードを使ったアプリケーション間通信を試してみた。

URLスキーム「IPCServer.demo」で起動するサーバ・アプリケーションを用意する。スキームの登録方法は、[iOS][Web]ネイティブWebアプリケーション(その4)を参考にして欲しい。

サーバ・アプリケーションの画面にはラベルがある、クライアント・アプリケーションから情報を受け取ると、表示するようにする。

@implementation AppDelegate
...
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    NSLog(@"%s, %@", __func__, url);
    if ([[url scheme] compare:@"IPCServer.demo"] == NSOrderedSame) {
        UIPasteboard    *pastedboard = [UIPasteboard pasteboardWithName:@"demo.IPCClient" create:NO];
        ViewController  *viewController = (ViewController *)self.window.rootViewController;
        [viewController setMessage:pastedboard.string];
        NSLog(@"pastedboard: %@", pastedboard.string);
        return YES;
    }
    return NO;
}
...
@end

クライアント・アプリケーションでは、テキストフィールドから取得した文字列をサーバに送信している。

@implementation ViewController
...
- (IBAction)send:(id)sender
{
    NSURL   *url = [NSURL URLWithString:@"IPCServer.demo://IPCServer.demo?key=value"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        UIPasteboard    *pastedboard = [UIPasteboard pasteboardWithName:@"demo.IPCClient" create:YES];
        pastedboard.persistent = YES;
        [pastedboard setString:self.textField.text];
        [[UIApplication sharedApplication] openURL:url];
    }
}
...
@end

シミュレータは、一度に一つしか起動できないと思うので、実機で試してほしい。

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ «前の日記(2012-07-25) 最新 次の日記(2012-07-30)» 編集