【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では直っているのかしらん?