概要

WorkoutSession や StatsView の結果を画像化してSNSに共有する機能。5テーマから選択可能、Instagram Storiesへの直接シェア対応。v1.0.6 でカード種類に「月次サマリー」「部位別ダイジェスト」を追加、Instagram Story 遷移バグを修正。

カード種類仕様

カード種類無料/プレミアム集計範囲主な表示項目
Daily無料当日当日のトレーニング結果
PR無料全期間自己ベスト記録
Weekly無料直近7日週間サマリー
Progressプレミアム指定期間進捗グラフ
Monthly(v1.0.6追加)プレミアム閲覧月の1日〜末日トレ日数・総セット数・総ボリューム(kg)・PR数・最多部位・月間TOP種目5件
Body Part(v1.0.6追加)プレミアム月 or 週(切替可)6部位別セット数の横棒グラフ・総セット数

月次サマリーカード(Monthly)詳細

部位別ダイジェストカード(Body Part)詳細

テーマ仕様

テーマ無料/プレミアム特徴
Default無料標準カラー
Dark無料ダークモード
Minimal無料シンプル白背景
Oceanプレミアム青グラデーション
Sunsetプレミアム夕焼けグラデーション

処理フロー

  1. ShareViewModel が選択テーマ・カード種類でViewを構築
  2. ImageRenderer で UIImage 生成
  3. 標準シェア: UIActivityViewController で共有
  4. Instagram Stories: JPEG変換(quality 0.9) → UIPasteboard(localOnly:true) → instagram-stories://share で直接Instagram Story編集画面へ遷移

Instagram Stories 対応(v1.0.6改善後)

// JPEG変換でサイズ削減
let imageData = uiImage.jpegData(compressionQuality: 0.9)
// localOnly指定でセキュリティ向上
UIPasteboard.general.setItems(
    [["com.instagram.sharedSticker.backgroundImage": imageData]],
    options: [.localOnly: true]
)
// completionHandlerでログ出力・安定遷移
UIApplication.shared.open(
    URL(string: "instagram-stories://share")!,
    options: [:],
    completionHandler: { success in /* Logger出力 */ }
)

ビジネスルール

関連ファイル

変更履歴

バージョン日付変更内容
1.02026-05-09初版作成
1.12026-05-13v1.0.6: 月次サマリーカード・部位別ダイジェストカード追加(Premium限定)、Instagram Story シェアのJPEG化+localOnly+completionHandler対応でバグ修正