From 65460c63b302d426b357d8e1ba3bb7f6c699c9ce Mon Sep 17 00:00:00 2001 From: Trey t Date: Tue, 10 Feb 2026 09:31:01 -0600 Subject: [PATCH] Add app icon asset, screenshot exporter, and misc updates Co-Authored-By: Claude Opus 4.6 --- .claude/settings.local.json | 7 +- Configuration.storekit | 10 +- .../xcschemes/xcschememanagement.plist | 4 +- Feels/Localizable.xcstrings | 53 +++++- .../FeelsAppIcon.imageset/Contents.json | 21 +++ .../FeelsAppIcon.imageset/FeelsAppIcon.png | Bin 0 -> 32780 bytes Shared/IAPManager.swift | 6 +- Shared/Persisence/DataControllerHelper.swift | 23 +++ Shared/Random.swift | 5 +- .../Services/SharingScreenshotExporter.swift | 176 ++++++++++++++++++ Shared/Views/SettingsView/SettingsView.swift | 64 +++++++ docs/AppStoreScreens.pxd | Bin 19065097 -> 19048713 bytes 12 files changed, 355 insertions(+), 14 deletions(-) create mode 100644 Shared/Assets.xcassets/FeelsAppIcon.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/FeelsAppIcon.imageset/FeelsAppIcon.png create mode 100644 Shared/Services/SharingScreenshotExporter.swift diff --git a/.claude/settings.local.json b/.claude/settings.local.json index d7d5dc8..0ecbc8e 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -37,7 +37,12 @@ "Bash(for:*)", "Bash(# Check Button and Label strings grep -rE ''\\(Button|Label|navigationTitle\\)\\\\\\(\"\"'' /Users/treyt/Desktop/code/Feels/Shared/ --include=\"\"*.swift\"\")", "Bash(# Double-check a few of these strings to make sure they''re not used echo \"\"=== Checking ''Custom'' ===\"\" grep -rn ''\"\"Custom\"\"'' /Users/treyt/Desktop/code/Feels/Shared/ --include=\"\"*.swift\"\")", - "Bash(echo \"=== How ''3D card flip'' is used ===\" grep -rn \"3D card flip\" /Users/treyt/Desktop/code/Feels/Shared/ --include=\"*.swift\")" + "Bash(echo \"=== How ''3D card flip'' is used ===\" grep -rn \"3D card flip\" /Users/treyt/Desktop/code/Feels/Shared/ --include=\"*.swift\")", + "Bash(ffprobe:*)", + "Bash(npx remotion:*)", + "Bash(npx tsc:*)", + "Bash(npm start)", + "Bash(npm run:*)" ], "ask": [ "Bash(git commit:*)", diff --git a/Configuration.storekit b/Configuration.storekit index ca14604..a3e76a1 100644 --- a/Configuration.storekit +++ b/Configuration.storekit @@ -67,7 +67,7 @@ }, "subscriptionGroups" : [ { - "id" : "2CFE4C4F", + "id" : "21914363", "localizations" : [ ], @@ -92,10 +92,10 @@ "locale" : "en_US" } ], - "productID" : "com.tt.feels.IAP.subscriptions.monthly", + "productID" : "com.88oakapps.feels.IAP.subscriptions.monthly", "recurringSubscriptionPeriod" : "P1M", "referenceName" : "Monthly", - "subscriptionGroupID" : "2CFE4C4F", + "subscriptionGroupID" : "21914363", "type" : "RecurringSubscription", "winbackOffers" : [ @@ -120,10 +120,10 @@ "locale" : "en_US" } ], - "productID" : "com.tt.feels.IAP.subscriptions.yearly", + "productID" : "com.88oakapps.feels.IAP.subscriptions.yearly", "recurringSubscriptionPeriod" : "P1Y", "referenceName" : "Yearly", - "subscriptionGroupID" : "2CFE4C4F", + "subscriptionGroupID" : "21914363", "type" : "RecurringSubscription", "winbackOffers" : [ diff --git a/Feels.xcodeproj/xcuserdata/treyt.xcuserdatad/xcschemes/xcschememanagement.plist b/Feels.xcodeproj/xcuserdata/treyt.xcuserdatad/xcschemes/xcschememanagement.plist index 218c6d9..cb40cc7 100644 --- a/Feels.xcodeproj/xcuserdata/treyt.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Feels.xcodeproj/xcuserdata/treyt.xcuserdatad/xcschemes/xcschememanagement.plist @@ -12,12 +12,12 @@ Feels (macOS).xcscheme_^#shared#^_ orderHint - 3 + 2 Feels Watch App.xcscheme_^#shared#^_ orderHint - 2 + 3 FeelsWidgetExtension.xcscheme_^#shared#^_ diff --git a/Feels/Localizable.xcstrings b/Feels/Localizable.xcstrings index 4a9f459..7159e0a 100644 --- a/Feels/Localizable.xcstrings +++ b/Feels/Localizable.xcstrings @@ -997,6 +997,9 @@ } } } + }, + "%lld DAYS TRACKED" : { + }, "%lld entries" : { "comment" : "A label showing the total number of mood entries recorded. The argument is the total number of entries.", @@ -1039,6 +1042,9 @@ } } } + }, + "%lld moods" : { + }, "%lld percent" : { "comment" : "A value indicating the percentage of health data that has been successfully synced with Apple Health.", @@ -1213,6 +1219,9 @@ } } } + }, + "→" : { + }, ">" : { "comment" : "A symbol that appears before a command in a terminal interface.", @@ -1543,6 +1552,9 @@ } } } + }, + "10 DAYS" : { + }, "12" : { "localizations" : { @@ -2200,6 +2212,9 @@ "All styles & complications" : { "comment" : "A description of what the \"Export Watch Screenshots\" button does.", "isCommentAutoGenerated" : true + }, + "All Time Moods" : { + }, "Allow deleting mood entries by swiping" : { "comment" : "A hint describing the functionality of the \"Allow deleting mood entries by swiping\" toggle.", @@ -4836,6 +4851,9 @@ } } } + }, + "DAYS" : { + }, "Days Tracked" : { "comment" : "A label displayed below the number of days a user has tracked their mood.", @@ -6279,6 +6297,9 @@ } } } + }, + "entries tracked" : { + }, "Entry Details" : { "comment" : "The title of the view that displays detailed information about a mood entry.", @@ -6833,11 +6854,11 @@ } }, "Export Voting Layouts" : { - "comment" : "A button label that triggers the export of all voting layout configurations.", + "comment" : "A button label that allows users to export all voting layout configurations.", "isCommentAutoGenerated" : true }, "Export Watch Screenshots" : { - "comment" : "A button label that allows users to export all watch face and complication previews to a file.", + "comment" : "A button label that allows users to export watch view screenshots.", "isCommentAutoGenerated" : true }, "Export Widget Screenshots" : { @@ -7262,6 +7283,10 @@ } } }, + "Fill 2 years data + export PNGs" : { + "comment" : "A description of the action to generate and export sharing screenshots.", + "isCommentAutoGenerated" : true + }, "Find Your\nInner Calm" : { "comment" : "A title describing the main benefit of the premium subscription.", "isCommentAutoGenerated" : true, @@ -7468,6 +7493,10 @@ } } }, + "Generate & Export Sharing" : { + "comment" : "A button that, when tapped, generates and exports all sharing screenshots.", + "isCommentAutoGenerated" : true + }, "Get Mood Streak" : { "comment" : "Title of an intent that checks the user's current mood logging streak.", "isCommentAutoGenerated" : true, @@ -8706,6 +8735,12 @@ } } } + }, + "Longest Streak" : { + + }, + "LONGEST STREAK" : { + }, "Make Tracking\nFun Again!" : { "localizations" : { @@ -9669,6 +9704,10 @@ } } }, + "No designs available" : { + "comment" : "A message displayed when there are no sharing design variations available.", + "isCommentAutoGenerated" : true + }, "No entry" : { "comment" : "A label indicating that there is no entry for a particular day.", "isCommentAutoGenerated" : true, @@ -9878,6 +9917,9 @@ } } } + }, + "of feeling" : { + }, "OK" : { "comment" : "The text for an OK button.", @@ -13294,6 +13336,10 @@ "comment" : "A description of where the insights export file will be saved.", "isCommentAutoGenerated" : true }, + "Saved to Documents/SharingExports" : { + "comment" : "A label indicating where the generated sharing screenshots are saved.", + "isCommentAutoGenerated" : true + }, "Saved to Documents/VotingLayoutExports" : { "comment" : "A description of where the voting layouts are saved when exported.", "isCommentAutoGenerated" : true @@ -18031,6 +18077,9 @@ } } } + }, + "Your recent moods" : { + } }, "version" : "1.1" diff --git a/Shared/Assets.xcassets/FeelsAppIcon.imageset/Contents.json b/Shared/Assets.xcassets/FeelsAppIcon.imageset/Contents.json new file mode 100644 index 0000000..a6ae92c --- /dev/null +++ b/Shared/Assets.xcassets/FeelsAppIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "FeelsAppIcon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/FeelsAppIcon.imageset/FeelsAppIcon.png b/Shared/Assets.xcassets/FeelsAppIcon.imageset/FeelsAppIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..c440a1640945db31900dc46c4b4152ea4f38466f GIT binary patch literal 32780 zcmeGEg;O2P^9GJCPVnG?;4Z=42@>2TIKhJ@1WV9EaJS$N!QI{6-QC?i*j?Vww{G34 z`xo3>KSJ$tcDkSLex|2)c6Lqzl@vaqA`u_~0DvkjC9VPhu;8Dt03tMaI`eFr0szlR zX>n1tp9@E`qEG-S285-$=~&J%9=QY8i{#$+AHn}0r-$We)(h-N07B|{D9RKJdHdSS|Igw7?>R6!wbf6O z+62O!bNKt^*qw}M6l&;>yK&mz!#00Nt)0L#)#@g2Y}eF9n&DO}W6JpZlkT8hH6!mQ zhHt}Fy4v?Q`N=tI}hs*2$YJcZI?+Vm;kUw z{#q*lNHELm31I5@?^K8QT1)=F8ZU@s0f4Hj=2(t8deF?iUY99p*sQYNnki{;r=s3X z$b7Lzuk0n;5br2Eo2u9DeXm`R!Z;mYm?|SKk$HY*=0|J>I8h7^|==Jpy!2xG6ASrL(j^p9D zb2=EEDI0%NtgAHMEO(D-eH6Ev=`nujNFfSs7NmhEkuX3lCkzZ|;ShoXAc_pQ!Di&F z?1F;qg6!;qPct0Bx?2Vau%dG&_}8eY*QnRvQIdrg5qc0BNNYn87rz>Bp!u|DfWmRR zyx?>la(YJ0)Li=F=6`G5=#o=^s__u)b<(eV!}50glQBR_{x5f~t8afdoY2*^M*piO zTFv*rOv`_~Kj@TJao^k|dpz@Sv39IblWT`TK>{p}9>*%1Z*Beg`3uO4-=_?g7D!ov zahx_U?)s;eF9rtGApj6rQ#`!fm8N?P;mLjCM1zMfgR$sz>gtS$0Jjl5Ik~3e$+n^D z>hLh0qV$8a{nw>o@bskyPJNtr6LUbHIxB#oe2@E(~Sqlz?Q1NL+lI z00wv)qcc7$7WvG-n1#1hW2R7b^%Aw1So?`t{NJg#!KHz*xSH)NT*4Hm(EI&X!WO3) z*Yv7PJav%94_>$jNM5q@T~HwDu^yJHl=*(b$A!vk_eE{PSDstx)OdsCojkW>fu%wf8&Ni9c|F6gyRl{JZKHcBBe{K(-b$ zY!lNdjaUb+1R2ui&j92~X=Xasy~x(~YsTs+O}3m?ENg8Q%fsiCGz_>2Ur^mKDN%8x zbb-xrn|w6!Z$&->-f-zcMgINY1UQvsuwB_y&xRrFC{4YpCz@*CRAW35=hKa=7$BvE z3y^MG+X_~uH!RhXKdU)GV@LaohzzhiuRK>%U5X5cRL`g4CFGeE4UY&YZLW4f)C{439#y-CdbsIr zReM|)5z03?JB*+O{Uwi)Bbd!TXdooK%>407#P0Q zeeQudUg<41VrB5`Zd!pe4PZP3Dn;5X6Y-)tvUBga9C;%QFU2QKD(&iYw8fVLKvqdn zp-q2A^CWVGz(M<_9CM%c4~tSybf5NQ%z5Mf{D+#Vt842F!;uM9F(XO$dJDo zj=Li%?751kKU+8a!$!QIcF97;SY22ltbVK^tWluT5fy+Gf%VhV({XXJ`l-z~z6U)6 zgEW}Po?84){2u&%{2_cr1oE$C_XMyk_;9Pl?zWxus~tX5*qiUf4sxL3JE4Kc@Tid- zyw&+5C}b6b5KELI9pt-jLeP}^<;#uEryo@(M}mUVJRkeNO69*cTZh=7lukxm%^iuf zQEYP&r|L&+Q>jaRVr^pWIAL9jWCYqeW%!fy=Pvv{(Mmb9_GJsbg?$VT2c-YydU<)B zGV3pCY26QQ4=RYs+!{p~CmZJ>JerjLMW}>XRuo@PN|!GgB78?Ta# z8tVn?9qY5*8y-};j9*x=Q9H$h!_3V(8>6YMgnH zr0sCJd@*K!XGLJffPgaY?(U(z;j_n!&WAf6a>@2R?8v&RG2+B@--7W<;R1ATuWzoV z)HDq&TlTPCqKN5BeCytC1O)_le3g>!gC>eBmWStO z8q*z0>Oh8JvJP&~GEbel4dEDx0E`d+HfB-yH{O2#<%+>U975Sj!Tk@KUI#v{RXbg=W;UE~3 zJC-ky#)^ZTF^p_dA30%ef4`*|bSDJn$>QyctCz{P3C7RV* zt*>(}>Vp5KK6iE$#rBgFP8*efE}lUM4}gV+YF#CXe>`7p+)YYs6iPcS@z@O$V$D$8 zYY<{(y&t^0yPJFcS^Wn~BgfvmILm$2d)oi?Yj7N61{fjz5*%E-v|BU30Iy$C{4kjS zFEu&8qn7AM;zj253B?;!&JicYlX|YW+D7ZLQN$+=uDRU{r`=R5`x;kF0?V1k@FF^9 zZH)-5$P^ip#C-J4!(}F<|4} zJL3BtalzWBJj|qF+;+6`yWPeJa)vSdk=*GEFz_(kO^Pw4lkdHGa+BPbeQ2l3j`%I5 z^_NG5oDO^0$b`+(WNoY#asY;d#Q&&sTA1e1mD2_3h&Il=sL+3D;wZj9>}X+fas2mJ zSA~Nv1v>)aO^9?)7z&9CjuIXMAfjHvV4k*|)UV&gL%jNLB$#B^hDX2pFgF_hmz1WX ziX>gmA2lR~?d;wVF~9H-Qf+J{Y*0&@H>Ft7TGkK`^9OQrV4=)y?`-2GQ_4N~3K z7;@SC>@^i97v?P!*nZMXb|@S>0GNs%Q(||%Ts#u~C?Ojd>U12&uTg)yLD#^l_V=y= zwgSVgLJ6^-G|En#8+u?J0P_A?mz~BaqE#Ft26ppL%xc7#r`*RjrlCs2is72ts3$OD z=n-JD{i)kURYC?`dPnm7HQp8Zf;H5K#dlCYv0$(YQT#+WG>s@Ru8#g=X& zH|`3-e5Lq%jq6n$)=yj9Um6hR)k4xv%NpvG@t9!(GW-u~x|BCM`i;AT3mhHitChe+QM}fsx z?XMmj40ie}Xr?Q1Nq(+~$Us;iQ$+hIF`%--x>Jj=sK!f&(J@>R6xS_R(Zx zZG}H#$^E^`qps2~WzNFF@~hzUSDZ3CqCcww zkKNuDiwyS=KEh-kp7GF~9jQ%Ch(SpiEQU25RK+=k1X3_U6d8gyDh^`*fZ3liX*QZc zT@eQ19Th}2o;oaeh08HJ4Xe)+HAD-Eg4t9(a7VO+g9;w6{&q~3^MKC8l2~SKX#X1OoeKLDQSMD0-xX_AwJa!UeqCuau;}!32Ff zS;LaBVzO;X3QJcru@NcS@<|-lk#QJ193^K?CZQMOFSphrF7-Y+sR}3^InH+~U(B$} zNBa4bEEOcSTbTKTeil$ieQyfC{Te_;jqx3cH)vJj6DTEu8ts zbgEOypJfVc;6P6oL<1l*+GaE=)=jzsh;&@C`+FEE-g}ySd|eI*{L3FIu^iCSSwW$k zMEA}9>D~LO)$G4P9hvJ;3-GS8<7YrP;;H_R>wB|R9vc{o{b6oIGVSiu+uIvm*M=rJ zIw!f0A3wIttLYg}5~8Si9~JMR`W+DHw9NmBh!Ej)8k*eRUP-m`XiZbW$kgM3fm*O| zb2v4mGC(?EY++&UUG66Qct&8M6F+3^6~M@pc=Tvp+}769 z%EpGm#KN-gu&A1yB~(nA+IPVAIlA6+;M>fPzWMhLOVU_Q4h8N_#B_{$?O^vQ;A4S3 zA_7?eLps%`-63pgLm95oJ|${^D`oil?duO}K^CnT0d&9u0t2L%#LmA-{kObN(YjY? z;PF?zj6|wXwv+wZEA7orGYC=#7l46NdE-{xS{s+^VGsk}5093XkTnh;dc%}aD@e$T znNXQ+n1>ZPYeE_2w2~?W=-|lc{n#_aq1YY1ed zi)${GQSq4uUkM#7kT^ET(fN+sZb9D;mDKIFzjboFA@%;A7lhzbL&NZ=)(eUrth%(N z?sk05{R6wV8s%x`=C>X+*BR1~P)9N`vaEKGIT>8KLue%!5bX<*EPKKTyik3uj8#!d z8bOvAq}YVRL}U(Ar=Kq-TgD$4*Z|>%=JwavAE>^?ZQ(5)<#I#XOyo>H&*3viX3Km7 zB|eDw&?c1gx4N9J=AtD<+dbZOYd5ZEp@YGBQ5chVl2eG$aeay{DAG6(35WuV9W7O9 zY0~Kdm+P*qYJVSTC={$L{HGp&qKX8@&jc_^NUt3#x8v3_p5~c}MtFZ0JrsPCh<@cF zBPvxE*&cZwNtTIC7zxL}o0N^_LyL(9_|QgprV7-vUUdfJscpP;_4eZZ!QM?8F1NE& z^NtuJ-=q+u%%X&m;H0cD{Dy+sUy+UN<3j@K`6Nxp#I!#@Utc@Ql%Efq5*R#UWr|N+ zxp+t~1{7&&)l~cdqgeNAOox1Td)hq>%r>(f#j!Kkif=j1paMAizV`=|oBI^$YBg2C zVxW0Iky2h22^tW7Z%li72vMOV5z;lSG&M6-M*27vfD#uHk3x_g5yKFyIm4VyO1bse zyYkdj5YGvcWR0nmKT>%@|94|C6}N zJ2oJ(*j_cuOLShco5_#ph$-?!X*{EHOti0^n)*oZ{Y>?<6g1ZG!~NPdy4%IQoBsLc zZPIBRSORjTDA~qNKWpo%JoDnCAkY^USQ8ykHvzILStpA z&4?S_-{k^0rS+RwmVZ{5nZkEiMc;A?9sTE4gg|Ph3rj|s;~-3+`OFv=f}C4yYx_WE zqS$rdWTwkg{CID?9Nwe##-|Ir1OQkOVWFRHPY?{?r#+zWcOFMh3VkJ(ZeWhy_)18m zENfm4-&+cMtqmH!G(UKWK)Qi02s;Lu^3F|B?OLMzrRM_uKiiem>k3T7dGBMjac5O~ zejMG(aRndo*K83_x>z~1Y}HjII2=V?{(_285od3^ryyh8yx|Y6XO4=2X<7$|7!WkO zdG3jf9uc9%)2HaFcRZPq{xk{S(jjX#0P6{NW24ErphUWI8JGvBEe7&jP zxC~AXHlDKDS|Xh9&bCWR+$yzp&-5s=K#9-rZDC-k=RbRR@<#i_^In7JCaOZEuzC1T z>IjI9tm@J*y^?borN{H0*n#KKLwFFFgK`#qTOn_IpEE3|;p;p}%{?`DJFi6q4YDIYMIzN9iGLpQciwi{HoA3|j#1 zvp$GyL>7M_)UBy6P?imqO<;d$TLd}#b|K*LXksQg9U)v$ba&*Y`r`*%B|0Vj{947Z zX=Ncn^`Ck*zDo2aFBssAL^e3scDAm7%v0Au)A`^}yP@HYR~Pl7E?1-VFZHZgnK&c! z8?R6hwbb_`*=}3g!9hXP`G5gTTB@L`mU{OTj7wi^TxjX;5OWMuH`DdV6wKkPaJ{7D z_0qqzKYylvw&Wk(+3gUGNpiJVd(uHsZN?bIxtOnbIf4XuJ_%iJahGcL8-_|6Uv|f$ z|9K+EXycoIR)KcW$D+Pwq8e?2v3do3eA?*lJ1dK7&-wdT*SZ=P2ao*}Vx|JE0;hr~ z)5Ac;tPV+G98U~euw)t8-3cKQ=Yx}2?v$|il_W)7D| zD2tr>{l{C)$FE&xUG|uLUnvX*P($|ph@Px~s_C;`xNP~&RhY(K8sUtK4j~^A)f}L6 z%Xd#jLfYm5M5;-aZBa*`MwfqrgM;iv^N`+H} zo*XUd*Zu2n3Jsob(G5STV9R)5F>W&(K!Gz)XMW`rW&B?AUMR|qkaH1CFEY%vbY(Q{ zkJeCRvAExj2(wxGa>HiVQGdeedy$EXU?Y-P%A=Cuf2^K^DKx}t5h%m2p=3#7nT(+p zm19iZXz(r4y~|e394n((ln(TfX+&TMqxu z`^QO#hgi2x0oO}-QTs=yJ2>FEf<;*P(m}hi=O1$DHV%#n>e^+DrrMN&#Z-yi&i+-$ zqkvYY=4W7yB6SyaX@An=Qqj~=-BBJ@3+7Ixz{--ou+RrtE*l!g`Jccjh1DGb=-<}* zUDrc3=Q{N0pBPT@ELhaFLCXM1@WUItI}e-V^*dP6PGJxduaJQOyi;_*rP9+|237Y7 zmm?US@`g=fTk)!^QR;3^ZEYP4AZc~dfU?N>YL;c5qzQ5bxIf9cYnuz%@lm2UAG<12CU5BGgT&}NHFg6yn&jN3x_)5!YB z`w$**WCX^z-A+A>WG_?kdf#x=_9*OZN3ubh?bw)4Tai0B3T3US{7#o?O#6(XAa$+! zEpDvbx!TL1S?WXrUT)&{L0$+Ap zbpIJyrFaD1KNMZXj|CT?O>(=~N^?G?lnutleRjKNdkZtiJoCHgt#quJcV`d6TQPiO zz@)z9;clFwf8yi1l8$+AhM2$9yEcz=`$@h*0#nT(68^IG{q(-@n;sZTh6$ zu&lU}eRofp9KNiz=xw#5<%)>WW~U$GTQMADfaB?DXP9I(RW|l!GF$c@4o)0pjkL_k zL|(drgOHp{CICO`GeAn4AcuyECKG#Ov+dl0z5*rnY35H6C+Js}_#M)(yLZR{?C{7? zlb(B_rsiLk35?JvW{7u>b~Gn#bA$DtIT130y)RG@g3(LjkkG?v$F07|nHwkKN4W2R zmQ@A3sf|o22O(|hE*$WI5m35ZEDh)8;_3?e@jmxn#)|emwE=(tLRqPXE#b6tDOndq zFn5&!B0-HUO!pT%myV9zR8(8YYowK2ro%F&OoR+vx_x*upxdTy4%V)&Iz@RK6HyDN zqgYH3@6kkcyZnV(94-y(It->iAWZMT#l_{Sd3Vr2fB!ud?&O0y5roo8W2U0WE^ykk zvs)77{v$jx;1CiP@>fL#XTH~?Ul~bc?!`by3g^G(_19+cCXZ{&_3Nh3%Idq8L9+LU z!VnJQ(7}bc&&pgz)?*k<9H6N#pCuBGOJt;j15ZjVV83r6ZY5`KbP;xfo349$`h~s3nGL?~-PcOF&t+q2L#1x%OMoYVG2xpdW1JK(1gy=G9e*N`s1R8=SGdQTr6qggSFj_0GsJO|9 zkBSV$%PUeEX~pJ*K;vvPwLH85w7=Icdj_8vck&$)73LdjxJ~eV(q-Mmtf#Ak+9xJ(fmfC^0vcfX zHiwDG^B#?;eu!MvXYHfKN?t61;jL zt~$8S4hn+H+SD{O^|m5<^RQptCjeDdRR;{Ta|}RkbIp+XV~&M+9%r#z7TPvZQPLP35rSw5IUCnHpc5q?6mMGHt#Qixf425~1#I z^^6NsUU$j3>m2-o^2A*5E}&)NpSr@eZM_Bh*}p-k?Xn-=OIREw^r&Pf;7Qi56-!J6 zzR(~?ii?iHA02PYS`SIhI_4+&RhPdp=l;9+Cr|9eeK)WKgdhCUNt2qP#hf` z-zl>FWx-A$#|2D6QiW8qj1>efc4U`GAI*>VEY3ZftVV7Gc_Wh*6b52)OY#bNV>!gW z2J*QyqR^p8()Qyq7;c)qlRWcpJ#2NZ#~YCuqO2oeNxw+3@O;!$*0j&r zc3qtrUpG}-r)K-;_8S9*G*asEY7-7F@Nagu4Wk>H*y$Hb%Yx&jdWy7}o7-!uC(i>} z0Mieaf=t@5PV5z;Eoazwf*6OAJc~Y3>Mt-y;zVlVY4dPmMa1ntGjq~A>{|6?eJNHd z_)W2ulI0D0cpk%nB^u?i@~5;oFW;oT=Z!Z2zQ`;bYVFG;`^2npba;{{o89e6ZEnl` z#^q+L={)<#H*y`(q%_pjXTc4bC1yBZ!zUy<9#6Z6_h2p{Qsmv{EKder~yw zff=4G4x5sl>kTUwQ_mSP5vbMvRED})AhGje3!DE?32Y<#+M>#RGYsutwZ)m77=C84 zv9n(Waw=}*u&}dFuFN<+?v;OLG?N*^EP!SFB74Ro1%_Jb!y)}OCdZr%Mz#mn_V@Do z2U-(zb%W5K`b_F)8hbN4#&vWH53;+)r>$Q~!ZDlvLc*tT964nd7TnZCJLAf!I+3{} zQ@XK$GR`M=_sz}C9P{(DOo`{@Uc1ZM)p`Cn@EMCIY*iF*%`cI*am;ZO6=@(qcDA(A1GZfADX z_I>YcJ%yKdLg#I8H@UaB309RKFUEwHYl)sy+iZG8tfh+9j7rL{^CouN`@W{1smU7* zZq>hd9YwfqbsOdABS(y&Ay?DWaVco{@IM#^q_=%Psq4s&@NIrLPN|7aZa&Kk8hTZE zH&9ILEW%aVazq&;rBe=vcttgL=wq)2mIhAVz#1Fp`={p`C;zASy)`zTI<9f6ql%tq zI4v@~BeY5F`eD%CEi6!gd|>Zp#&g7#MxFig!^LHYe5TFfhfsOuR6%D;7y|*`IW5CoOTf4xrru3vig4Sp59;RoaC?Ayvr68Xhaqr?jMm8Q;N) z{o%K$fgaH;59n!(_Io9PxVTtJKfe#ahcD1TBKd}zrF9n#(M)Dqtw9W> zlfTYEDl&dBFi9(})+5yJHA#t;Lj!yli>2-pNo%~06GKaIsRHiHlg4I?2DewRsRGrn zG+?ju-uqrrUk#Fsv_*pa9sdMVe)q9ykNRk+f8KKq;#Gf$4BrR?HE7rX1J#?R*sXbY z;A!kB>UBi|GdeojnvhTqaCpA~EI!q>8n|F7{1jk{8?5RI4G*j4;?(JxT$mCN;*)&; z+EK)DgN_}Wkt;|DD3)si@!;){67$Wz|6@gEC2}xYLTp`qef>gW?~>2uNM|)?`0maQ zB3w&{X20rZ2U>o99S1CO81J9>Ro=!JQVi~!w=%*P*VCOO@`DSZeT90OGQ$Gt_d>@F zDlQZkLBye@XX+O!66!7+Q)80hlG=edz*sQUI=7p-nW@K*s{m!XN}I-(9)9M>ImrQK zsQg=(dVCH#gI5;+A*idVf5ln$fnxX2hl(;p^SK%yj$A34V3zRQIe$D$`KrZlUmJB= zaXOjc8gpgk7UN>D%sHZ2P!*(*K(H_cd}@{a7XaD|*gHF0jH&&RCQL!GIcMH2nQiT2 zIdFEUHIwrY2SIvk*QQB#qu$12kUxW%cTte8*-IGr?^~(43=PSkx zH~+FbBuIL}#FNfvW8gEejL!L<=lzZ;2Z$hRXlj1SQm!9Oi;1~bUhm!6Dy(ns)xPok=qn2s%CiOzAe4fk z0wado`)QV3cz$FNgwL>|e0fFL+E*PXyQ`}lU!!~6YxJ$<3}#nyD>p&;5Vdlgl%k56 zw7nxK1Td|&NnO57ZC3~hIt@k0bsLqJgrOmGiRZR@6MDTS8oau-9+NDS7>qYA1fB&7 za)lM%o2A^2N9kGTd>Tf?k0Pz{$@Sr4A_|W1qpt#7#H&x$U)0LgsWeY63)>Y?f8mNW zfa7}K+~tSmHgh|nXZU;0?aP_~# zi`^HS#Tp`>&xRiptru@<&#(F5@>mKCF%iHXHipc1_Yt) z`u6c_rznRu&7=Lzr5J%QFIxE z34#LGgok!|dTwTLm+y+2t+gI~-;SzH@k!)O$zlcDaAT9Evcn{*pmTQBOCf1ZB8K!yiMqq4iZ4Oyf(?xw0Z zCcb6kLNl6K=6uw0j!bf5Hz$60%z<}|;*+K=UNtB~Avk#iL=14$+_tr0s`!(k!B2wK73n^VIJR@87VFiHlE^;^# zQV0HYaJFtj|8o5TKF_N%#Vut{Sa3*#v)|sZgsA8cN#l+2tQTkM#pUHEXIEEn_lnK+ zazXEtscQs?`}Vkg=8wX6usZX6Go{|uPxQ90Y@A6KFqv};C2 zRo6zJ2u+++ZBhb(nDBs9{J`mQ&SD**KM8G%Nb{xYrvrwq2pjvw?1T13?j7Ao?S)WY z&FeKi`$a0=q7x~1iPOhFE<$%_IBqzioM^)7jp2V*8$+W3N*R2B^vl43E!9Fb`fSRf zPP~SjSAoYqUh2WnNo-DJ#$IvxR}u0zk z=04L|PAfN)p@OU+X@Eiw&e056T*(NeWF1x_Uid4Im2wu{-+y;Zp~bC zvkj$Tt&zZ|yppEp@zEcjg^<1BI)B|Wt}`BkG{PD9lFq~i+R|Dxbo~M_$pxSQXheAL zlNg-LcJnlW{5$Aom-`={o@u){szY?cHa4+EjJ%9#zU{xikexTt%JRtagBb0aWDzm) z)gLO0BTiP=VHOPGf8QPcBMA>!DIQOG*+^I(H><9Kr!;nNrWk$J=Q^C5Uyq5s(n zIGL51_X|*k>N2=P!oUEQ(*(11*su*!5;Q%}>y_j})SgWxleM`o=}2EpKIbMKyt|fkJtl`h}`)jwPW_J!H{fY2WpH ziqtUs+*YnGVBI4F{9lkC68CmGY9x|TNk=-cfHuPLMR|^kE0o~B4rbQ;1c0WD#r=tin3orW(%qd*_rT1J4Ml~tocQ;+H|E{u zneH+7dvO3bX0hKa;~v|&QUZ6sp@1_#i(GK#C(D`?qn9`w8hZRP$G^IoQ@|3I#&4_T zc>H;`c+R%u1DeFlu>4M2{+)LTAw#;cukV}RiTJCu=f2;tS)bAT@Os4GkimwEQUwv* zV}%5^Vi}XCuOTBDAJ0@c34e}j6A&bp@kL(;Jm|G0>V=2%Pz zhWu1zWo7Or4;<{@->>G0a~sCz>pq`DlX9nEx$qS-YP+>I$@)7sak&@!+`oKnimFKTfZOSUP)M>rQn0MJq=Rt5fS;iw^8Q?gc3wsAGm-7VykTSK{L+Q3fz=caVc(mX6n;yGt>#WF8klO2# zsa(4#&-5PD%jOcFU{oN+p=ZuM-`_6{4`EaSfM3ai?BZ3s?GnLLXv0%eYDPaliw`pJ z@#8S1LAS33jVQeRK;!2>swfZk4(Kke!zAZ28Kx2}Xcl4o1GqIbNIU$~@mR7D4xSxv zbmuzar-o@KJ)ViutfoSb62_g9gi!LGf?zy3*2PfvUEJ{JO!`_C{Dd41D5I=qwt zYbyG0ru4nAo7lxcP`SRjiGP8ClJ=?<74}tgoMV^-Md|2%p6m$p7wpgr(uUTrzIcH6 z(3?jnPb(e5N}$-r<{5Ht5U7y>KuXdJ>me2sJ#R@#v9JLVOm=qm{3+V*RPMVcxv%1G z-jb7_PZz2OPLm&R%NDl%IqS6=42Hd5wX!q3OePevCC$yu@BtMOD1b7OhhNTaY}`@r z>h^v&*?#}(>i(Vs%N!;I37cy9%QgQWW8(m!DyVt_4|0Pqf%KhX5z)93?AAAllkVtC2I}hFjPRZ&&udh~1faFdl0pHp#D?fM zuYvxj5=hx?tCIn+IP;FJe=l;|`(h@2=bhy0NZ|y41Eheb4;KKt9^0V~==0heF>~)M z9`HAto0@N<(EGAoYSBde*nYq1`Ebph{qEI(iiqZ~j~tGhh!_#@P5=buN4>5Yqgcrz z_p)2%;I;}s2OhIN$9ZU*c6e@cmbVuE^BuJZSD3#a0%F5&kkXIq`AIb2e=P67P?0db z12(`f@tLrEwAY!;{r4ms*OMf-)8UJ3R$aqK@PVPyL1R69G{sQEN`NCl&M%V$^w)BP zEV1p=cO*n9C@|wh$wjY`NVmnJ6|#pc4{EwY!578eTEr)?CqbAf7!GiH%CqXCYviPW zEr0}&dQa^kcH6oh7AXPo_6lN?99WvP`JH-SW_k-I=%O@h#5BjIlf^i^!o$MYfG)7u z^g;FvHwz0@g*bL6b{Jt-mRpW+OXIu-ziWQ?|Dy(ZtuIh|II!cesl@WE|I;9q_}(~g zRyjR2MN5)s?X>ih;&OKs{S!HgE}S!>bMU!SPj4@skPztFFt32uC5J-EVm>zL8w}WA z@YthCF1Sn_R<+H4-jR$FeA{|P(BxxacvpvXf^mYod2CXt6%>yCnipt_YXYIshfV|_ z3DBT=a$w+_pxZ>{_q;)dOJ_1RRB4e#y8UgO-)q$fQd`5!rAwy3@}f>B!Ww$H{^N(y zZzxiH&?1lcEV}@*;1D#v@EeR1u3fp`F1mc}6E;_{$m3ZAuj3mDL;kh)QG!W}NFz}V zly#xCUER}B2)A}0+UV4TcpZ+_4DIn3!Na@`P5S);rGOke5E&ZGz3+J^z)yi8OnjHo zFV~5AI4gf>SLzdMT;!(=3CD0CB|+X61ie=OC(CARy!Fqza=t*9i9x)#@5=^%EMt9f zd88L%hh7(v`qgNP0*wRQ(5!m)B$EEd*W?We5o`o`5wzDR5?EbUlS}i9tNWl$#x+gj zz=u6?*LQs|CwUbWF*RTatgu#FS?lUn%s(ESL#0v;|?dc2@J<+_~ ztO4jLV_b51;0+;wO3a=rYk}<(glE{fn(?%W`=zzDvAMZ0`#@ODccD zm3qAIL69&bm~9DY<0h%?)Bpwwm@T-O=I@p@=m8$9nc_kFl9_U&Uj{{KUYT<|bzl1@ zvhN>FT|f0Uvit5HTZyE z)ZU3uP;+fC`r#y(Tj+VZH=;^(b3)s7?J0??xIQ%v&stCTtlQ&oZ{S+ZdNK}y6lG5) z+5D#r4L8bp23CRJ8%}J1r5yM9J6`>e&chJ(V9()omawfr)wlh@QT|$i9=(iS@)8>3 z;nJ42T(ob*FYjEq2A!VI-5p+BLz#shUP6Y;@5lKKJi_?X{6)U#sSAxeZ~yuwJyvD> z;5T~PYHw@ zx9dM#BFM`Bz7KlkuAd`yq90YvZBKm7@Z+(;&B;!0!9^GhPv>_7zxt~%G&s@8_&T

-*KN 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 ZK*dBu_x6AbLLdNu>_;W3Itk;D{{tWhM_m8_ literal 0 HcmV?d00001 diff --git a/Shared/IAPManager.swift b/Shared/IAPManager.swift index 4c1abcd..60bf02b 100644 --- a/Shared/IAPManager.swift +++ b/Shared/IAPManager.swift @@ -42,11 +42,11 @@ class IAPManager: ObservableObject { // MARK: - Constants - static let subscriptionGroupID = "2CFE4C4F" + static let subscriptionGroupID = "21914363" private let productIdentifiers: Set = [ - "com.tt.feels.IAP.subscriptions.monthly", - "com.tt.feels.IAP.subscriptions.yearly" + "com.88oakapps.feels.IAP.subscriptions.monthly", + "com.88oakapps.feels.IAP.subscriptions.yearly" ] private let trialDays = 30 diff --git a/Shared/Persisence/DataControllerHelper.swift b/Shared/Persisence/DataControllerHelper.swift index 3001b9f..60c5161 100644 --- a/Shared/Persisence/DataControllerHelper.swift +++ b/Shared/Persisence/DataControllerHelper.swift @@ -79,6 +79,29 @@ extension DataController { saveAndRunDataListeners() } + #if DEBUG + func populate2YearsData() { + clearDB() + + for idx in 1...730 { + let date = Calendar.current.date(byAdding: .day, value: -idx, to: Date())! + var moodValue = Int.random(in: 3...4) + if Int.random(in: 0...400) % 5 == 0 { + moodValue = Int.random(in: 0...4) + } + + let entry = MoodEntryModel( + forDate: date, + mood: Mood(rawValue: moodValue) ?? .average, + entryType: .listView + ) + modelContext.insert(entry) + } + + saveAndRunDataListeners() + } + #endif + func longestStreak() -> [MoodEntryModel] { let descriptor = FetchDescriptor( sortBy: [SortDescriptor(\.forDate, order: .forward)] diff --git a/Shared/Random.swift b/Shared/Random.swift index 36e4dc7..0608f90 100644 --- a/Shared/Random.swift +++ b/Shared/Random.swift @@ -136,8 +136,11 @@ extension View { } func asImage(size: CGSize) -> UIImage { - let controller = UIHostingController(rootView: self) + let wrapped = self.ignoresSafeArea().frame(width: size.width, height: size.height) + let controller = UIHostingController(rootView: wrapped) controller.view.bounds = CGRect(origin: .zero, size: size) + controller.view.backgroundColor = .clear + controller.view.layoutIfNeeded() let image = controller.view.asImage() return image } diff --git a/Shared/Services/SharingScreenshotExporter.swift b/Shared/Services/SharingScreenshotExporter.swift new file mode 100644 index 0000000..5f7ca32 --- /dev/null +++ b/Shared/Services/SharingScreenshotExporter.swift @@ -0,0 +1,176 @@ +// +// SharingScreenshotExporter.swift +// Feels +// +// Debug utility to export sharing template screenshots. +// + +#if DEBUG +import SwiftUI +import UIKit + +/// Exports sharing template screenshots for App Store marketing +@MainActor +class SharingScreenshotExporter { + + /// Exports all original templates + kept variations as PNGs + /// - Returns: URL to the export directory, or nil if failed + static func exportAllSharingScreenshots() async -> URL? { + let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] + let exportPath = documentsPath.appendingPathComponent("SharingExports", isDirectory: true) + + // Clean and create export directory + try? FileManager.default.removeItem(at: exportPath) + try? FileManager.default.createDirectory(at: exportPath, withIntermediateDirectories: true) + + // Create subdirectories + let origDir = exportPath.appendingPathComponent("originals", isDirectory: true) + let varDir = exportPath.appendingPathComponent("variations", isDirectory: true) + try? FileManager.default.createDirectory(at: origDir, withIntermediateDirectories: true) + try? FileManager.default.createDirectory(at: varDir, withIntermediateDirectories: true) + + var totalExported = 0 + let distantPast = Date(timeIntervalSince1970: 0) + let now = Date() + let calendar = Calendar.current + // ────────────────────────────────────────────── + // Fetch shared data once for all variations + // ────────────────────────────────────────────── + + // All moods data + let allEntries = DataController.shared.getData( + startDate: distantPast, endDate: now, includedDays: [1,2,3,4,5,6,7] + ) + let allMetrics = Random.createTotalPerc(fromEntries: allEntries) + .sorted(by: { $0.mood.rawValue > $1.mood.rawValue }) + + // Current streak data (last 10 days) — fetch 12 days to handle boundary, take last 10 + let streakFetchStart = calendar.date(byAdding: .day, value: -12, to: now)! + let streakEntries = Array(DataController.shared.getData( + startDate: streakFetchStart, endDate: now, includedDays: [1,2,3,4,5,6,7] + ).suffix(10)) + + // Current month data + let currentMonthEntries = DataController.shared.getData( + startDate: now.startOfMonth, endDate: now.endOfMonth, includedDays: [1,2,3,4,5,6,7] + ) + let currentMonthMetrics = Random.createTotalPerc(fromEntries: currentMonthEntries) + .sorted(by: { $0.mood.rawValue > $1.mood.rawValue }) + let currentMonth = calendar.component(.month, from: now) + + // Last month data + let lastMonthDate = calendar.date(byAdding: .month, value: -1, to: now)! + let lastMonthStart = lastMonthDate.startOfMonth + let lastMonthEnd = lastMonthDate.endOfMonth + let lastMonthEntries = DataController.shared.getData( + startDate: lastMonthStart, endDate: lastMonthEnd, includedDays: [1,2,3,4,5,6,7] + ) + let lastMonthMetrics = Random.createTotalPerc(fromEntries: lastMonthEntries) + .sorted(by: { $0.mood.rawValue > $1.mood.rawValue }) + let lastMonth = calendar.component(.month, from: lastMonthDate) + + // Longest streak data (find longest "great" streak) + let selectedMood: Mood = .great + let longestStreakEntries: [MoodEntryModel] = { + var splitArrays = [[MoodEntryModel]]() + var currentSplit = [MoodEntryModel]() + for entry in allEntries { + if entry.mood == selectedMood { + currentSplit.append(entry) + } else { + splitArrays.append(currentSplit) + currentSplit.removeAll() + } + } + splitArrays.append(currentSplit) + return splitArrays.sorted(by: { $0.count > $1.count }).first ?? [] + }() + + // ────────────────────────────────────────────── + // Export originals + // ────────────────────────────────────────────── + + let allMoods = AllMoodsTotalTemplate(isPreview: false, startDate: distantPast, endDate: now, fakeData: false) + if saveImage(allMoods.image, to: origDir, name: "all_moods_total") { totalExported += 1 } + + let currentStreak = CurrentStreakTemplate(isPreview: false, startDate: streakFetchStart, endDate: now, fakeData: false) + if saveImage(currentStreak.image, to: origDir, name: "current_streak") { totalExported += 1 } + + let monthTotal = MonthTotalTemplate(isPreview: false, startDate: now.startOfMonth, endDate: now.endOfMonth, fakeData: false) + if saveImage(monthTotal.image, to: origDir, name: "month_total") { totalExported += 1 } + + let longestStreak = LongestStreakTemplate(isPreview: false, startDate: distantPast, endDate: now, fakeData: false) + if saveImage(longestStreak.image, to: origDir, name: "longest_streak") { totalExported += 1 } + + // ────────────────────────────────────────────── + // Export All Moods variations (666x1190) + // Kept: V2, V5 + // ────────────────────────────────────────────── + + if saveImage(AllMoodsV2(metrics: allMetrics, totalCount: allEntries.count).image, + to: varDir, name: "all_moods_v2_gradient") { totalExported += 1 } + + if saveImage(AllMoodsV5(metrics: allMetrics, totalCount: allEntries.count).image, + to: varDir, name: "all_moods_v5_colorblock") { totalExported += 1 } + + // ────────────────────────────────────────────── + // Export Current Streak variations (666x1190) + // Kept: V2, V5 + // ────────────────────────────────────────────── + + if saveImage(CurrentStreakV2(moodEntries: streakEntries).image, + to: varDir, name: "current_streak_v2_gradient") { totalExported += 1 } + + if saveImage(CurrentStreakV5(moodEntries: streakEntries).image, + to: varDir, name: "current_streak_v5_colorblock") { totalExported += 1 } + + // ────────────────────────────────────────────── + // Export Month Total variations (666x1190) + // Kept: V1, V5 — exported for BOTH current and last month + // ────────────────────────────────────────────── + + // Current month + if saveImage(MonthTotalV1(moodMetrics: currentMonthMetrics, moodEntries: currentMonthEntries, month: currentMonth).image, + to: varDir, name: "month_total_v1_clean_current") { totalExported += 1 } + + if saveImage(MonthTotalV5(moodMetrics: currentMonthMetrics, moodEntries: currentMonthEntries, month: currentMonth).image, + to: varDir, name: "month_total_v5_colorblock_current") { totalExported += 1 } + + // Last month + if saveImage(MonthTotalV1(moodMetrics: lastMonthMetrics, moodEntries: lastMonthEntries, month: lastMonth).image, + to: varDir, name: "month_total_v1_clean_lastmonth") { totalExported += 1 } + + if saveImage(MonthTotalV5(moodMetrics: lastMonthMetrics, moodEntries: lastMonthEntries, month: lastMonth).image, + to: varDir, name: "month_total_v5_colorblock_lastmonth") { totalExported += 1 } + + // ────────────────────────────────────────────── + // Export Longest Streak variations (650x400) + // Kept: V2, V3 + // ────────────────────────────────────────────── + + if saveImage(LongestStreakV2(streakEntries: longestStreakEntries, selectedMood: selectedMood).image, + to: varDir, name: "longest_streak_v2_gradient") { totalExported += 1 } + + if saveImage(LongestStreakV3(streakEntries: longestStreakEntries, selectedMood: selectedMood).image, + to: varDir, name: "longest_streak_v3_dark") { totalExported += 1 } + + print("📸 Total \(totalExported) sharing screenshots exported to: \(exportPath.path)") + print(" originals/ — 4 original templates") + print(" variations/ — 12 design variations (2 all moods, 2 current streak, 4 month total, 2 longest streak)") + return exportPath + } + + private static func saveImage(_ image: UIImage, to folder: URL, name: String) -> Bool { + let url = folder.appendingPathComponent("\(name).png") + if let data = image.pngData() { + do { + try data.write(to: url) + return true + } catch { + print("Failed to save \(name): \(error)") + } + } + return false + } +} +#endif diff --git a/Shared/Views/SettingsView/SettingsView.swift b/Shared/Views/SettingsView/SettingsView.swift index 05e0e09..d0181fc 100644 --- a/Shared/Views/SettingsView/SettingsView.swift +++ b/Shared/Views/SettingsView/SettingsView.swift @@ -27,6 +27,8 @@ struct SettingsContentView: View { @State private var watchExportPath: URL? @State private var isExportingInsights = false @State private var insightsExportPath: URL? + @State private var isGeneratingScreenshots = false + @State private var sharingExportPath: URL? @State private var isDeletingHealthKitData = false @State private var healthKitDeleteResult: String? @StateObject private var healthService = HealthService.shared @@ -73,6 +75,7 @@ struct SettingsContentView: View { exportVotingLayoutsButton exportWatchViewsButton exportInsightsButton + generateAndExportButton deleteHealthKitDataButton clearDataButton @@ -654,6 +657,67 @@ struct SettingsContentView: View { .cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight]) } + private var generateAndExportButton: some View { + ZStack { + theme.currentTheme.secondaryBGColor + Button { + isGeneratingScreenshots = true + Task { + DataController.shared.populate2YearsData() + sharingExportPath = await SharingScreenshotExporter.exportAllSharingScreenshots() + isGeneratingScreenshots = false + if let path = sharingExportPath { + print("📸 Sharing screenshots exported to: \(path.path)") + openInFilesApp(path) + } + } + } label: { + HStack(spacing: 12) { + if isGeneratingScreenshots { + ProgressView() + .frame(width: 32) + } else { + Image(systemName: "photo.on.rectangle.angled") + .font(.title2) + .foregroundStyle( + LinearGradient( + colors: [.green, .blue], + startPoint: .leading, + endPoint: .trailing + ) + ) + .frame(width: 32) + } + + VStack(alignment: .leading, spacing: 2) { + Text("Generate & Export Sharing") + .foregroundColor(textColor) + + if let path = sharingExportPath { + Text("Saved to Documents/SharingExports") + .font(.caption) + .foregroundColor(.green) + } else { + Text("Fill 2 years data + export PNGs") + .font(.caption) + .foregroundStyle(.secondary) + } + } + + Spacer() + + Image(systemName: "arrow.down.doc.fill") + .font(.caption) + .foregroundStyle(.tertiary) + } + .padding() + } + .disabled(isGeneratingScreenshots) + } + .fixedSize(horizontal: false, vertical: true) + .cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight]) + } + private var deleteHealthKitDataButton: some View { ZStack { theme.currentTheme.secondaryBGColor diff --git a/docs/AppStoreScreens.pxd b/docs/AppStoreScreens.pxd index f1083fbc9e05a09b21fb1a02ad073e92222a4dc6..8c6788675182c126776e67dbb5570ad4fb112a9c 100644 GIT binary patch delta 46758 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 p_2qw?T;UJY!3?Y|FOB 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