ObjecTips

Swift & Objective-C で iOS とか macOS とか

SSReadingList で出来る事

リーディングリスト周りのAPIを使って何が出来るのか調査。
Framework は SafariServices.framework でリーディングリスト周りのクラスは SSReadingList のみ。

API は以下

イニシャライザ
+ (nullable SSReadingList *)defaultReadingList;
- (instancetype)init NS_UNAVAILABLE;

ヘッダには alloc init を使わず defaultReadingList を使えと書いてある。
また、リーディングリストへのアクセスが許可されていない場合は nil が返ってくるとの事。
と言ってもリーディングリストへのプライバシーアクセスのAPIは現状では用意されていないようで、設定や機能制限などいろいろいじってみても返り値が nil になる事はなかった。

クラスメソッド
+ (BOOL)supportsURL:(NSURL *)URL;

引数のURLがリーディングリストでサポートされている(追加可能)かどうか。

インスタンスメソッド
- (BOOL)addReadingListItemWithURL:(NSURL *)URL title:(nullable NSString *)title previewText:(nullable NSString *)previewText error:(NSError **)error NS_AVAILABLE_IOS(7_0);

リーディングリストにURLを追加する。
title と previewText で表示するタイトルとサマリーをカスタマイズ出来る。
もしURLが追加されなかった場合はNOが返ってきて引数のエラーに値が設定される。
エラーのドメインSSReadingListErrorDomain でエラーコードは現時点では SSReadingListErrorURLSchemeNotAllowed = 1 の1つのみ。
ヘッダによればサポートするスキームは http:// と https:// のみとの事。

title に @"Title" previewText に @"PreviewText" と引数を渡してリーディングリストに登録すると以下のように設定したタイトル、ウェブページのページタイトル、設定したプレビューテキストが表示される。

f:id:Koze:20160215081228p:plain

title と previewText に nil を渡すと以下のようにタイトルにはURLが入り、ウェブページのページタイトルが表示され、プレビューテキストは無しというような表示になる。

f:id:Koze:20160215081231p:plain

いずれの場合も一度リーディングリストからURLを開くと、設定済みのタイトルとプレビューテキストは破棄されて Safari がよしなに値を設定してくれる。

f:id:Koze:20160215083853p:plain

APIは以上。

まとめ

iOS 9の時点で SSReadingList で出来る事はURLの追加のみ。
リーディングリストの取得編集は不可。残念。
しかしヘッダのコメントの文言から推察するに将来プライバシーアクセス付きでリーディングリストへのアクセスが許可されるかも知れない。(バグレポへの要望次第?)

ちなみに Private API を調べてみたけど SSReadingListWebBookmarksXPCConnection というプライベートクラスを介して動いているらしくSSReadingList から直接リーディングリストの取得編集はできなかった。