SmartNews などの共有シートから URL を受け取り、iOS アプリ内で履歴管理しつつ、表示中のページを PDF 化して GoodNotes などへ共有するためのサンプル実装です。
現在の実装は「本文抽出を最優先に自動整形する」よりも、「共有された URL をアプリ内ブラウザで確認し、表示中ページを PDF 化する」運用を中心にしています。
- Share Extension は共有 URL を受け取り、App Group 経由で本体アプリへ保存する
- 本体アプリは共有履歴を一覧表示する
- 各履歴行から次ができる
Arcで開くアプリ内ブラウザで開く
- アプリ内ブラウザで表示中のページを PDF 化して共有シートへ渡せる
- SmartNews の中継 URL は検出して注意表示する
- 診断ログや内部メモは
Debugページへ分離している
- SmartNews の共有 URL は
l.smartnews.comやsmartnews.com/article/...の中継 URL になることがある - SmartNews アプリの
Open in Browserと完全に同じ URL 解決を、このアプリ内だけで再現するのは難しい - そのため SmartNews 記事は次の運用が最も安定する
- SmartNews で
Open in Browser - Safari で元記事を開く
- Safari から共有
- 本アプリで PDF 化
- SmartNews で
App/SmartNewsToGoodNotesApp.swiftApp/ContentView.swiftApp/Info.plistApp/SmartNewsToGoodNotes.entitlements
ShareExtension/ShareViewController.swiftShareExtension/Info.plistShareExtension/SmartNewsToGoodNotesShare.entitlements
Shared/Models.swiftShared/Diagnostics.swiftShared/PendingShareStore.swiftShared/ShareHistoryStore.swiftShared/ArticleExtractor.swiftShared/PDFGenerator.swiftShared/WebViewArticleLoader.swiftShared/WebPagePDFRenderer.swift
SmartNewsToGoodNotes.xcodeproj
App 本体と Share Extension の両方で App Groups を追加し、同じ group ID を有効にしてください。
現在コードで使っている ID:
group.com.example.SmartNewsToGoodNotes
対象ファイル:
App/SmartNewsToGoodNotes.entitlementsShareExtension/SmartNewsToGoodNotesShare.entitlementsShared/Diagnostics.swift
両ターゲットで Team と Bundle Identifier を調整してください。
- 外部ライブラリ不要
- 標準フレームワークのみ
- GitHub Actions 用のワークフローは
.github/workflows/ios-ci.yml ios/SmartNewsToGoodNotes配下に変更が入ると CI が走る- CI では iOS Simulator 向けに
xcodebuildを実行する - コード署名は
CODE_SIGNING_ALLOWED=NOで無効化しているため、GitHub 上でもビルド確認だけ回せる
- 記事 URL を共有
- Share Extension が URL を App Group のキューへ保存
- 本体アプリを開く
- 本体アプリが未処理 URL を読み込む
- アプリ内ブラウザでページ確認
PDF化を押して共有シートへ送る
- 本体アプリの
共有履歴を開く - 任意の URL を選ぶ
Arcで開くまたはアプリ内ブラウザを使う- 必要なら PDF 化
- Share Extension の入口
public.url/public.plain-textから URL を抽出PendingShareStoreに保存
- 共有 URL の未処理キュー
- 以前は 1 件だけ保持していたが、現在は複数 URL を順に処理できる
- 共有履歴の保存
- URL とタイトル、共有日時を保持
- メイン UI
- 共有履歴リスト
- アプリ内ブラウザ起動
- PDF 化開始
Debugページ表示
WKWebViewで表示中ページを PDF 化- 広告、ヘッダー、サイドバーなどを軽く除去
- SmartNews / adjust / adj.st の中継 URL をある程度追跡
- App Group 上の診断ログ保存
Debugページで表示
- メイン画面は
共有履歴を主役にする - 履歴のタイトル右側に
Arcで開くを配置 - ログや内部情報は
Debugページへ分離
- 現在の
Arcで開くは外部ブラウザ起動です - iOS 側で Arc Search を既定ブラウザにしている場合、Arc で開く運用を想定しています
- Arc 専用の公開 URL scheme を前提にした実装ではありません
- SmartNews の中継 URL は、元記事 URL に自動解決できない場合がある
- SmartNews の誘導ページをそのまま PDF 化すると、白紙や誘導ページ PDF になることがある
- Safari 共有前提のほうが安定する
- 履歴行から再 PDF 化をワンタップ化
- Arc 専用の安定した起動方法が確認できれば実装差し替え
- ブラウザ内で「現在ページを保存」だけでなく、印刷プレビューに近い調整 UI を追加
- 履歴の検索・ピン留め