カテゴリー ‘ MacOS/iOS Dev.

Mac OSでも楽チン Facebook編 その2 Social.framework

まずは下準備。FBにアプリケーション登録をする。登録画面には、iOSはあるもののOS X用のアプリケーションを登録する場所がない。とりあえず「ネイティブiOSアプリ」を選択しておいて問題ないようだ。次にBundle IDを作成するアプリケーションと同じにしておく。次に詳細設定でApp Typeを「Native/Desktop」にApp Secret in Clientを「いいえ」にする。これで終了。

今まで一度もFBのアプリは作ったことがないのでイマイチ手順が分からないが、とりあえず何かをリクエストしてみる。

	ACAccountStore *accountStore = [[ACAccountStore alloc]init];
	ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
	NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:@"取得したAppID",ACFacebookAppIdKey,
					[NSArray arrayWithObjects:@"publish_stream",@"publish_actions",nil],ACFacebookPermissionsKey,nil];
	[accountStore requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error) {
		if(granted){
			NSArray *accounts = [accountStore accountsWithAccountType:accountType];
			ACAccount *anAccount = [accounts lastObject];
			NSLog(anAccount: %@,[anAccount description]);
		}else{
			NSLog(@"error: %@",[error description]);
		}
	}];

結果は、
The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time.”

インストールした直後はまず、基本情報のパーミッションをリクエストしないといけないようだ。(install timeってそういうことでいいのかな?)

続きを読む

Mac OSでも楽チン Facebook編 その1 NSSharingService

前回タイトルを楽チン ツイートにしてしまったので、フェイスブックにかえるとなんだけヘンテコなタイトルになってしまった。

OS X 10.8.2 になって Facebook連携にも対応した。10.8で既にTwitter連携は搭載済だったが、Facebookも同様に楽チンに連携できるのか試してみた。
もちろん、FBアカウントは取得済みで、アカウントを「システム環境設定:メール/連絡先/カレンダー」に登録しておく必要がある。(ちなみにFBのテストアカウントは登録できなかった。)
まずはTwitter同様にNSSharingServiceから。同様にNSSharingServiceDelegateプロトコルを追加して、

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
	NSSharingService *service = [NSSharingService sharingServiceNamed:NSSharingServiceNamePostOnFacebook];
	service.delegate = self;
	[service performWithItems:[NSArray arrayWithObject:@"hello"]];
}

すると、

ダイアログが表示された。左上で公開範囲を指定できる。
一つ分からないのだが、FBでは本文中のURLにプレビューがつくようなのだが、これを実現する方法がわからない。Safariの共有から投稿するとそのページのプレビューが一緒に投稿できるが、performWithItemsにNSURLを突っ込んでもNSStringで文中にhttp://から始まる文書をいれても同じようにならない。さてどうするのかな?

UISearchBarDelegate textDidChangeが通知しない?

iOSのアプリケーションをiOS6, iPhone5に対応させるべくアップデートをおこなったが、バグ?という現象にであった。
UISearchBarDelegateのsearchBar:textDidChange:が通知されない。といってもソース上から値を代入した時(self.searchBar.text = @”hoge”など)の話であって、キーボードからのテキスト編集では通知される。もちろんiOS5などでは通知されている。ちなみにUITextFieldTextDidChangeNotificationも同様に通知されない。searchBarTextDidEndEditing:は通知されている。とりあえず、別方法で処理するしかなさそうだ。

Xcode4.5, iOS6 SDK

App sandbox not enabled またまたドはまり

Xcode4.5に上げて、MacAppStore用のアプリケーションをアップデートするべくオーガナイザからサブミットした。
前回の「ヘルパーアプリ使用時のValidationエラー Invalid Code Signing Entitlements.」問題が解決されていることを期待したが、残念ながら全く変わっていなかった。
なので前回同様の処理をしてバリデーションを通して、サブミットした。しかしすぐにiTunesConnectからメールレス、「App sandbox not enabled」としてバイナリーリジェクトをくらってしまう。設定を変えてしまったかと思い幾つか試してみるが、何度やっても同じ。なので、前回のアーカイブと内容をくらべてみた。しかしほとんど違いがみつからない。

もちろんxxx.entitlementsも

<key>com.apple.security.app-sandbox</key>
<true/>

となっている。
しかたがないので、一旦Xcode上でヘルパーをデベロッパ用でコードサインを使って、SignatureのCodesign applicationをオンして、アーカイブ。ところがアーカイブを見ると前回のサブミットには入っていない「archived-expanded-entitlements.xcent」がリソースに入っている。内容はxxx.entitlementsと同じ。

アーカイブを開いてヘルパーの

  • _CodeSignature
  • embedded.provisionprofile

を削除した後にターミナルでコードサインし、無事レビュー待ちになった。泣けてきた。

Mac OS X 10.7.5, Xcode4.5, OS X 10.8 SDK

[その後]
10/23 無事通過しました。20日待ち。長っ!

Twitter API ルール変更 RSS配信の終了

API1.1のその後情報なのだが、さらにRSSの配信を打ち切ることに決めたそうだ。具体的にはAPIからのデータ取得形式をJSONのみにするということなのだが、これでは既存のRSSリーダーでは読めなくなってしまう。更新をわざわざ手動確認するのも面倒なので、本家アプリのみだとツイートの存在を忘れちゃうかもしれないな。

しかし、Safariも6 からバッサリとRSSリーダを切り落としてまった。むしろこちらの動きの方が気になるくらい。あれだけWeb2.0だとかサービスだとかともてはやされたのに徐々にフェードアウトしていくのだろうか?

とりあえず、CocoaからのJSONパースは json-framework がよさそうだ。とても楽にパースできる。

下記で大変親切に説明してくれている。

JSONをパースしてくれるCocoaライブラリ – おいしいCocoaの飲み方

return top