【Xcode】Facebook投稿でplugin com.apple.share.Facebook.post invalidated

【Xcode6.2 + iOS 8.4(iPhone5) + MacOX10.9.5】

引き続きFacebook投稿の話です。

前回のポストに書いたようにFacebook投稿自体は出来るようになったのですが、プログラムで設定したメッセージが表示されませんでした。コードはこんな感じ。

//facebook:送信
- (IBAction)sendFB:(UIBarButtonItem *)sender {

    // 組み込みのFacebookが利用可能な端末かを検証する
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        
        // Facebook投稿機能のインスタンスを作成する
        SLComposeViewController *slComposeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
        
        
        // 投稿するコンテンツを設定する
        // 表示する文字列
        [slComposeViewController setInitialText:@"#アイコン顔カメラ"];
        // URL
        [slComposeViewController addURL:[NSURL URLWithString:@"http://www.c-geru.com/"]];
        // 画像
        [slComposeViewController addImage:[UIImage imageNamed:@"icon_10.png"]];
        
        // 処理終了後に呼び出されるコールバックを指定する
        [slComposeViewController setCompletionHandler:^(SLComposeViewControllerResult result) {
            
            switch (result) {
                case SLComposeViewControllerResultDone:
                    NSLog(@"Done!!");
                    break;
                case SLComposeViewControllerResultCancelled:
                    NSLog(@"Cancel!!");
            }
        }];  
        
        // 表示する
        [self presentViewController:slComposeViewController animated:YES completion:nil];    
    }

}

で、表示される画面がコレ。「slComposeViewController setInitialText:」のテキストが表示されていません。
メッセージが表示されない

この画面でテキスト入力すると、そのテキストは投稿されますが、Xcodeに下記のようなメッセージが表示されます。

plugin com.apple.share.Facebook.post invalidated

【追記】2015.8.17 ちなみに「slComposeViewController setInitialText:」をコメントにしても、投稿後に上記メッセージが表示されます。

調べてみると、こんな情報が。

ios – UIActivityViewControllerでFacebookにシェアできない – スタック・オーバーフロー
sharing – ios plugin com.apple.share.Facebook.post do not show provided text – Stack Overflow

これによると、Facebook側のポリシー変更ということのようです。

Platform Policy 2.3 Example and Explanation

メッセージは基本ユーザに入力してもらうと考えれば、ハッシュタグつけるとか以外に困ることはなさそうですが、一応備忘録として。

【Xcode】Facebook投稿で「ログインしていません」と表示される

【Xcode6.2 + iOS 8.4(iPhone5) + MacOX10.9.5】

アプリからFacebook/twitterへの投稿は、投稿するだけなら各サービスへのアプリ登録は必要なく、Social.FrameworkをインポートしてSLComposeViewControllerを使えばカンタンに出来るらしい。

Objective-C – LINE/Facebook/Twitter投稿 – Qiita
[XCODE] iOS組み込みのFacebook投稿機能を使う方法 – YoheiM .NET
【Xcode】Facebook、TwitterにiOS標準フォームで投稿する
serviceType – SLComposeViewController Class Reference

で、試してみたところ、Facebookの方は「ログインしていません」とメッセージが出て投稿できない。

ログインしていません
表示されるアラート

iPhone側では・・・

・Facebookアプリはインストール、ログイン済。
・iPhoneの 設定>Facebook でID、パスワードは登録済み。

になっています。

いろいろテストしてみたところ、下記の手順で投稿できるようになりました。

1.Facebookアプリをログアウト。
2.iPhoneの 設定>Facebook でID、パスワードの登録を確認。
3.Facebookアプリでログイン。

Facebookアプリに最初にログインしたときに、iPhoneの 設定>Facebook でID、パスワードを登録せずに、Facebookアプリ側でログインしていたため、Xcode側からは設定情報を使ってログインされていないと判断されていたみたいです。

またFacebookアプリはログイン状態を保持しているので、iPhone上でFacebookアプリが起動されているかどうかではなく、Facebookアプリログインされた状態になっているかどうかで判断しているようです。

ブラウザ上でのFacebookページへのログイン状態は関係しないようです。まあ設定の情報を使っていないので、当たり前か。

【Objective-C】BSXPCMessage received error for message: Connection interrupted というエラーメッセージ

【Xcode6.2 + iOS 8.4(iPhone5) + MacOX10.9.5】

Xcode5でiOS7をターゲットにして作ったアプリの改修をしていて、Xcode6.2でiPhone5の実機にビルドすると「BSXPCMessage received error for message: Connection interrupted」というメッセージが出てきます。

※同じ環境で、iPhone4S(iOS 7.1.2)では発生せず。

起動時のみログにメッセージが表示されるだけで、動作そのものには影響なさそうだけど、気になるので調べてみました。

【参考】ios – BSXPCMessage received error for message: Connection interrupted – Stack Overflow

このサイトを見てみると、どうやら「iOS 8でCIFilterのバグが原因」ということらしい。

CIContextのcontextWithOptionsで指定するoptionに、iOS8以降で項目(kCIContextPriorityRequestLow, kCIContextWorkingFormat)が追加されているので、明示的にオプションを指定しないとダメということなのかな?

【参考】+ contextWithOptions: – CIContext Class Reference
【参考】Context Options – CIContext Class Reference

とりあえずこのアプリはiOS7以上になっているので、「kCIContextUseSoftwareRenderer」を指定することでエラーは消えました。

【修正前】

_imageContext = [CIContext contextWithOptions:nil];

【修正後】

NSDictionary *contextOptions = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithBool:YES],kCIContextUseSoftwareRenderer,nil];
_imageContext = [CIContext contextWithOptions:contextOptions];

※ imageContextはCIContextとして定義されています。

@property (nonatomic, strong) CIContext *imageContext;

その他、下記のサイトを参考にしました。感謝。

超できるかな(Swiftでカメラアプリ1)
Study Swift: CIFilter – Invert the photo color by built-in filter
CoreImageで画像の加工をする その3「GPUにするべきかCPUにするべきか」 – Teratoma

手持ちの環境が対応してないので確認出来ないんだけど、Xcode6.3では直っているのかしらん?

【Xcode】Audio Uint関連リンク

あるアイデアが浮かんだので、Audio Uint関連を調べてみたけど、現状まだよくわかりません。。。

リンクばかり増えてSafariがタブだらけなので、まとめておきます。

・Objective-C – iOSで特定の周波数の音を鳴らす方法 – Qiita
これはやってみた。iOS8からは一部変更されているようで、warningが全ては消えないものの、とりあえずXcode6.2で動作しました。変更点はここ(CoreAudio Changes/iOS Developer Library — Prerelease)にあるけど、イマイチ理解できず。

よさそうなのが、今や入手困難な「iPhone Core Audioプログラミング」の著者が書いたブログ。書籍のベースになった記事らしい。この順に読むのがいいらしい。途中まで読んだ。

・Getting Started With Audio Unit
・Introduction to Audio Unit Development
・iPhone Core Audio

本家Appleのドキュメント

・Audio Unit Hosting Guide for iOS

あとコレ。第10〜15回までAudio関連の話。

・実践! iPhoneアプリ開発 (10) 楽器アプリの作り方 (1) – iPhoneのオーディオフレームワーク | マイナビニュース

Core Audio関係はこの辺り。後で必要になるかもしれないので。ただ一般的な話とか、オーディオファイル再生みたいな話は、前にMusicPlayerを試作したときにある程度調査済。

・iOS CoreAudioを使う上で参考になったサイト – 日々の記録。
・iOS Core Audio | シリーズ |Developers.IO
・Core Audioの概要(PDF)
・Core Audioの復習 | Second Flush

iOSには直接関係しないけど、Web Audio API関連。

・Web Audio API を使用してウェブブラウザをギターのチューナーにする件. | hirooka.pro
・Web Audio API の Oscillator で楽器を作りたい話 – Mach3.laBlog

これも直接関係ないけど、周波数の話として。
・ギターの音程とフレット/ELECTRIC GUITAR & BASS SUPER MANUAL

今のところ、見つかったのはこんなところで。やっぱり資料的にはObjective-Cの方が潤沢。特にあまり情報のないものは。

【2015.8.3 追加】
・Audio Unit 再入門 – Over&Out その後