From 939d2a45cf2ba6b5f9120572daab8cbf68b8959d Mon Sep 17 00:00:00 2001 From: Soner YUKSEL Date: Fri, 26 Jan 2024 14:04:48 -0500 Subject: [PATCH] Fix brave/brave-ios#8516: Add Open in Brave to iOS Share Sheet Action (Action Extension) (brave/brave-ios#8682) --- App/ActionExtension/ActionExtension.plist | 45 ++ .../Contents.json | 14 + .../brave-icon-outline.png | Bin 0 -> 29492 bytes .../Contents.json | 6 + .../ActionToBraveViewController.swift | 118 +++++ .../de.lproj/InfoPlist.strings | 2 + .../en.lproj/InfoPlist.strings | 2 + .../es.lproj/InfoPlist.strings | 2 + .../fr.lproj/InfoPlist.strings | 2 + .../id-ID.lproj/InfoPlist.strings | 2 + .../it.lproj/InfoPlist.strings | 2 + .../ja.lproj/InfoPlist.strings | 2 + .../ko-KR.lproj/InfoPlist.strings | 2 + .../ms.lproj/InfoPlist.strings | 2 + .../nb.lproj/InfoPlist.strings | 2 + .../pl.lproj/InfoPlist.strings | 2 + .../pt-BR.lproj/InfoPlist.strings | 2 + .../ru.lproj/InfoPlist.strings | 2 + .../sv.lproj/InfoPlist.strings | 2 + .../tr.lproj/InfoPlist.strings | 2 + .../uk.lproj/InfoPlist.strings | 2 + .../zh-TW.lproj/InfoPlist.strings | 2 + .../zh.lproj/InfoPlist.strings | 2 + App/Client.xcodeproj/project.pbxproj | 438 +++++++++++++++++- .../xcschemes/ActionExtension.xcscheme | 96 ++++ 25 files changed, 752 insertions(+), 1 deletion(-) create mode 100644 App/ActionExtension/ActionExtension.plist create mode 100644 App/ActionExtension/ActionExtensionIcons.xcassets/ActionExtensionIcons.appiconset/Contents.json create mode 100644 App/ActionExtension/ActionExtensionIcons.xcassets/ActionExtensionIcons.appiconset/brave-icon-outline.png create mode 100644 App/ActionExtension/ActionExtensionIcons.xcassets/Contents.json create mode 100644 App/ActionExtension/ActionToBraveViewController.swift create mode 100644 App/ActionExtension/de.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/en.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/es.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/fr.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/id-ID.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/it.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/ja.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/ko-KR.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/ms.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/nb.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/pl.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/pt-BR.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/ru.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/sv.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/tr.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/uk.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/zh-TW.lproj/InfoPlist.strings create mode 100644 App/ActionExtension/zh.lproj/InfoPlist.strings create mode 100644 App/Client.xcodeproj/xcshareddata/xcschemes/ActionExtension.xcscheme diff --git a/App/ActionExtension/ActionExtension.plist b/App/ActionExtension/ActionExtension.plist new file mode 100644 index 000000000000..8fc0f46dc5d1 --- /dev/null +++ b/App/ActionExtension/ActionExtension.plist @@ -0,0 +1,45 @@ + + + + + BRAVE_URL_SCHEME + $(BRAVE_URL_SCHEME) + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Open in Brave + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + $(BRAVE_VERSION) + CFBundleVersion + $(BRAVE_BUILD_ID) + NSExtension + + NSExtensionAttributes + + NSExtensionActivationRule + + NSExtensionActivationSupportsText + + NSExtensionActivationSupportsWebPageWithMaxCount + 1 + NSExtensionActivationSupportsWebURLWithMaxCount + 1 + + + NSExtensionPointIdentifier + com.apple.ui-services + NSExtensionPrincipalClass + ActionExtension.ActionToBraveViewController + + + diff --git a/App/ActionExtension/ActionExtensionIcons.xcassets/ActionExtensionIcons.appiconset/Contents.json b/App/ActionExtension/ActionExtensionIcons.xcassets/ActionExtensionIcons.appiconset/Contents.json new file mode 100644 index 000000000000..4b456505673f --- /dev/null +++ b/App/ActionExtension/ActionExtensionIcons.xcassets/ActionExtensionIcons.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "brave-icon-outline.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/App/ActionExtension/ActionExtensionIcons.xcassets/ActionExtensionIcons.appiconset/brave-icon-outline.png b/App/ActionExtension/ActionExtensionIcons.xcassets/ActionExtensionIcons.appiconset/brave-icon-outline.png new file mode 100644 index 0000000000000000000000000000000000000000..1c90b7cdab060d87f14c5787b263b154e0d5ebcf GIT binary patch literal 29492 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ðYW z_;w~)amsgG9=ipRA|521AJ>2QsL6DAZ}0!06EX?(gcx1a8|}sC4KO|7b_7 zl9m58{uZ42ZK>P{*087bR%8WNzxXk``kI4QSVP5kc7AJPCAqrq+gZ1m{};JMD}q0i1<>ls&Unt-)eRNlp5stp{(#cF%44XLIPU00jFa&-+YLxg^bP zmKUXvoNIdSpA0A;U4x{B?ecl|L(5%%s z4LJ-y<9KJ_%b?^m++<~mf6rJ-<^9uTqL2}}s<#wph);%L#D;9%0AZbnO=6 zUVHbmG?eb6h?sePsHeEWP)sh2LR^8IHiOGac1J z&q|JV#yF5(3=apb8o8eLBlvNrcXlOS? z`^KUTVNZ?#4EhgV_na|iP^nz9UrAWou{22cZ|~~yrh-rn_oP$?&o^T|?}vo<{E)AU z5I`PCKZD;@Oa_a!IZDCaIA`UZ$SWjr>jQXuK)qDx#$K}rxc9vrgZLHgf^$VHkwfV zROYFcy}p20t!@WfVBrn=Hip=24vQ9S?}~e5I@i=~eJ|VF<1&E!(EMbyV?u~IP#E2tg(1$p0WnOsUvzoL91KqQwr0vg#LP0*7sIz-=LxX zOK!>Ev^|~6xyg2r!>wE2f|J}a^933!phpX?4$$%l8z6yZ7<{|!+o4a}L?HLa12fMr z*pwYK?d^L3Eof{wx+mm}7Jz2y738la&X#?7qf|+UVaFoGN~a>!<#p_DWKpv!ROCLL zAt22dx9C7o*S%@{XN?+XUzP5qgN7Mz)fLV08u-;c>O$v~V7Uk<&d{ArH8CqybvA)z9kJr@ zYo5Aa2)+PR4sE3N84l6=dOI+NLAz0dwtJv1xj@{!QH5l>?Lb|ybZQ>Emo1zDEGiV8 zU|O=?=hb^dWTb9E(>!*rOr1g=ZX9+^M|q3#mF3Y!e(R}!bkIbB3#3+%N*Og|ownJe zQEOkR`4(CWU!_Y5V#uP)AX49OBg(9H=#$2?x9b7$O)rlGST35rLA3{)3G1aE8a!;&B!?2mPSqL z4T0MOzoR9IT4)9*YVHpcmH?NxQ20gxX)6W2b0MapMtp=;1LteJcl~nUndxpY;qvB%)nk%6fBRX@_%i$Q5;B*t?DnO+RcM49H4870=EQWP zut!d7fm(|6K=++9i{W$GuAjQ*g7h~0uVwP0%P-75oAz;APRK18pKr`-u&un`ei9S| zbhOb%#T6z%ix=;q5~`w~M>Hq44<&o)H)bSwasM&*M-*TpF>+HNLPO7?%EtOsdJTkG zWmGzQ?B?&ozDn7GI^P-Z(gZj2aH>st-CiXvQYNl-CJPBFURFSV75?I2lu(|>IBG@( zm8*4J&o9fpzuJHL&Sy|0lu%gp37&B*V8>gGG**n&yYLXPGrH7LDf_O4V9HW5O><$} z_$-6Bh<;|~iCC!adj8f{y^GGMl?_0tzDz8IZ!G#^_``|M6)#H;5JzLXH|oE-mrBq} z0B{-Ex({+Hz>I+cMH1*wi~O^lXufe{BDA7BZo1Kc673(jHTaN~cT;a*hk^TUsK?sK zvZrRG#je?Iz_hPrg`3XJPx9s%tP0&M^_9@-3#-x47QIn%A6#6y4!rb=rcrni(AS%J zwaXkQnG3}cKR~>bfscf#q6TUwxueyI)Gd+xuW?ljo0$Q8QT z-cuQ3f25T2kd5BMaa$aRddKYAlh*BM-cE|RV0H9(fgpA-*xs8}*TNrnWp5`fdRvJk z7uPO_I!c4PId2hov7kGL7%h||XlZ6XT9kZqA1Hj~Mbv$hDe_XfM5yl1rIWiXHl~~t z($4w0l?V83?aL4Z$)H}038pfE!ug_JSbSWWcN3k|_sTV#>mn*I`&}XO&i&Zy0%yd< z*9J(Slgw>~a`$BYt+c@5-d)y-PxYHnT!^Ta&umfG$vy~Do&9{@0Sh+Is zQ^qjDw>-r%tCgE+`adS$!(T+KPKRRV_vOiS=K9Xwr>{bxyc*I zrMrEAld!UJva4>=mk5f!T>^svWoyptav@etARkdicOAzosgZBrpcs{*J>QlZ?}1wX z{Oo4CeOt-Z+3B-rovt+Lg5>K|XA<56w(PEyA@IIC|3-O5Z!5tHw1hkWoI_gLyVYth zO2IY)l4R+t`|_r7JB{5A86#G|uTv8>w9$_7-!6ctT@>wHM|?P3emV3Ovsx0B-?_fd zx^Dhz!qx+3M%Nv!$tx1*25jG6YyFdF%tp~=c+m1)rEDV|N?P*D^Adt*vtc+%Ug_xArO20ywiQt43T3 zzszgLtl6Q@}3e1;-p=YK2PAM;9!U>txl{%N4JPbq=kic?i#A+veG z^Q)uw+n4D`>ZHtG_z%(T(H0Gs=5AAtw_@{m1t{PL&erK8&pqH{=ncrUUWNG%xU?oWm2= zXz6yrmb5$zA}}eC(57!A64N)4=N47$O!kj-#y}>>s+YYUVbY{-2EuKIY%nDPxNOlg zc2i#TX3GW~FOj54iow0Z5M_O&BK0l8ryG+~ig3rjpe6TW{1MQ;wf{N=))mxC&i0kCn+~lVpR-~)o+tIPdskT1 zG2J!z__|JdPJY zoRqS(<{wzS{%h0259y9H>oW>%xOS!yw_r6JTKBh)m4C*)(**Q7-{#6K8*56Lz9)dc zl@zpg5*DlnMMq+<5AC}|2x2|y*1D*i73*VF_8R_nQn!GW?An(L?A)Xo>Udr86_u0l zRpau>8M!yR0@|$=tK|ZJD7hrrQ#mtSQ(i^_+3O$P#Gu_nMNqg?kj4%gnJbHwgul+~rI}?Pm9Mah+CZq<=Zp^dU3+RROYi`@mGl&e+*OR;IvD zHv4>ZI4P8l&`pU|j{WQMY`Nc0c(`8!Zf&Sglc+E>kc#Ji2rrW`$~Qm-i9ti9k`U@v zPA}h9xwe%fQ*5JdKk+`4U?+s24p-{O)jUmM_75Ou6debGdS8cv3P!Gd`FF@56!@-0 zw5H3d}F_&%VG;Irem=ZXJMX zDy|huK51%+0vNwy!E?t+eYp`_Osn@aO+I%C@p)hNR?;`ecQm*;O572AMV4bb>hqunH8#a!)~-5c{kxne@<_6PL8%j5<@Su7P!+Vpxv|d z^1sa7*c@Tgv~L2b`Oxc>E|fB}31@Tl^U)t_(8~_lEHqp#K`W-Z#XazTZUd55Icm+2;qU;w!WOBZ?yIXd4K;0ximgxMq=}lG#ZL<-#`nn%6 zeowdp+@l;HWd#uN-z+n@qfZ5!36fp{1;OfK8K23_SvbEc%V2X)^ol!og4nffH2Q5! zUe}Z~1U-H)2^nFyIoZQ%X*xgi#y(p&sg8}uoGN>A>^ z&^h4g&XIcSLt1^IlkR4Pl5HBrjR(ZOdsW%^WslL;kF0>}eJth;AMBB5;Pz_Xg7Evj zrr<8uNGiQYB|x!Ii?Kl7!`+g9bIfJ{bU{|S#X#5FPf*}G%|Aq4^kei?=2EMlURF38 z^unGSwNh}w9WCnCAl}-F5J?>MCx5-$95^?om+x&qab3n?M<%%afqE~|x0K5peE1DS zQWXBK_hD`rbb3OyxM|t7!pL9=ui47BiqTUIaVZ9U?FOy)R|Jp)+I!H}r+oh70krQ) zbh{eXfGm>ChY~M`v{}Icc|>Do>w9i)qNY z_%+F2=KEGK5_~1(UTaDcb4Y9<(CS6&1OdJ4jTPZpkBka%LlS@9e14?}N^B;_NLA>juiq|G?633d0FKD|t)MolNI+XLDY^NU8Ck;XU z!4%+rIzkR4+*Hp!sdb&p|DIN#aego@;M|}Lm5M`Uns0kG&c$E4on+6QIZ#$hS6Rly zvEE&aQ9tbK)^?3Mtg+Jp^0*7!Ms}jo?bw+dMow>i&G_JDQPLmHHv}r&1ob}(hpeWD zz591~v>$*H^Jd^sUS~%oTA~bVwh57vnod;GghW&&7j##}E+ zXQueQ=Go!!mF=vOwhyudAPm93@wv5;i5)!Mu|OO5NEzEF)6z^7#|(ge@=%cCc=*4t zSITuW3v!GJ$td*74E6gMWH*Zt#JyH|aJoa^6uJq*yn6ec@5SZ~POr8O7;lY z>!TR?$58RdWTfY9>BOnf*Qvdaiu928(vXq+4*dy(W-NHJjSk}9r|oKr1An{?{<2hV z@#(o>OTIjQ9P|^TP(A#tk>B?~*F(pW=pP*lg%D2(XT5Z2$rJpHaBAB1t37sdXzl}{ zksT@v!i&h{d~m2f30xoa7|tHu)|x(K(P8hh+4oyYd(?#?31Drw_c7|a`Bg=AzONcz zuAwJA<8I)G>9`w>`(_2NML;QK?G`5R_ukE@{b7~L;7bE4Q!M}eVvmPUw#d9L+>TKO z@Bx}&7(i_`TEFh=dzo-6XUm76V|BNimqQ+E+uoqv~JMbu=QdZq;}aX z-;0&s*tQ#APAvNYO|yQYBSrf-l+znKo2=3L;aTdXlPU1pZW(2Tz^O0jwTx@{BgkS# zT;?@yr$!o0$W91CkR#+>KAVSz4am$o=(hzB{R3}WGG~ptFY^ap3N!*_Tc8azMFD&P z!~45P47v#Yp5+b}%2-Zu+?cr|sWEewbu~>n=L#d&hENcER>2K=cu7+jiY~=p(ViD3 z-LM{zsm%&fL`of=Q+=I&Uu#CdztzqtfJiiOnQ193-ZjgUM*3Y$?Ct8 z4SX_x`qClsmqv8w_dnLFKHV+eqv+6=`ft#pT}#4^!r%iGt*UO*=&fdf-jXXCJsXk! zbR;T1F!AMq_R+Q+#(#Q2q^EP z9WjVkp8yGn0!v0B#l_K6-BZzmC2tB(y>%#l%frm2;eLRt|IPvaVLG$}52UBJofCCw zXyC2L6QS13g?;_-WXdU#ZV+eEK!sEftY$f|bF*XpKYFzqi+As_5wi(gOqWgvf4mP6DCVv$2Y$s~m10frf&@^j z4ZCKel2})k{6@y4dK)8wJnx!&&UE3PNU8@efv^{!@IxRYj6Kw$R68@xt!vHOk<5Ao zFhT}%y|+(lAL4(F?XJSgYq!*M#a-JNlsh<2BhLkCDjMv*MR^N7u3OnchivroY9U`D zl#r^MDWb($t)K6vsTD=P4N?wwhHE(5z?}~bQ%Xo(%tI=i*-`3-c*Z7k_PsG=**9GD zi$l+bnHz8DNUr!*2BmNg=JpwQr@Y^T;GWN@(?#sCTcmJO{UJBj#ZO3zJhfgSf(z*z zh%05G1EorDCq1y~FIMfj@AAWUF8e0Q5zZg0 zS(B$O%D3;1$CzK}aqGvE>NeD%RbON|s@EwsppIQ}J;2f*LepZ@()**QmWE{tTQ@p= zvgG2ml6MOM*om;A2cODGBO}iKXl#49^62I^my^>(J+H)n0Y6fRF7!a=$iI{dGmi+J z_^$Z#+e)RT6(-4vJr+ciy&?A=(txB!14WtMmy5w)pN3{JIw4H82LO8|U?1s3wUcCy zW7WS!T)yXFX|BmHyRM(Yj5l({X*+Fh<6}djp^*h5$zk0C#Tic?%sf~b9AI7Jgf&XT zk&IWB^DxAN@!=5s?OPCwVV24jF+H~t#gWyx5HioY3;9A2>1cg-7)ctG-YH_U&OuNO zrKeK-`50M@h(i+U7(hyx-2D?Gry}k_E@InaUB=X+fc>b?pj6RnOSu|cZBlw<%8b4a z|DHmjgE485wRKHPxPbdpN`u8kwstdw5gvVBc zP8{L9hZpB$9 z2PjjhCg)wW?#IaZVSrhIVWLb7%<5!z`zTYtjTL1LiiPWg&{l>MvS*Loh&fOl&V&?n zrdnL|+qgE6rme7SGTu=s!)AFW9=$SbYEoqdSx5-?&TE6b0zqEx0u<@s2xFAcm`vcs zB@b+sK>I6oBnXO%96dLM0|C89VF>COj-(fHR%=fER@W4mJGU54YJNcrf=9@#zLFr* z+TMyx*?*~WhhYt+jhLuViM8_6#lBBbRgg<+kFt4o2MLdxFqU0Sd zd&49u_-yinMEckU5`KeFMwWb&?y_w1WOkC!duj4kr#wkRLI8puq(ztd%BzY>M(+ic z0Gva+SnJCPJ3FM=_~|gDFRb=fXSD?LD72YrZYgD8L6m`y0C&L^;ubGz4KkJuZt<)Y z1V#AQO~~^9m?DK&UTB3(yW;IKj1s`jXd8OluVOXdpGHb=B0Z-z>#hg*KwCS3@_l6? zSP_PM;jmjL1&GUe*Xqo!k3ILX${DKY59fQz9y~Bu!a=>dyr$fI7gbdJ-+14t_n8py z8};N#a)RnABMD)RfmTNKQk~iWYtkonC`x$H^~K~*FLwQ#`Y*mPQ8FX#^8Y1(EE-Ag zZ()B0Xy?YAev_2le0ms~eJHk&N4fdgOW?|RaKTgV*?p_)LDRIT8j;pq#|=wZV;RE7?E(r_0)lBndEw?(sXgP4c>T?O|$5C)&b7Ay9 z3=}q%-mTv=Y|8R^eA=(6W0rOH6A~6a)1?^ zeg#}|)skY%w1e2Fc3aBgL{a1}WYCse%1J8OK0KDKrB*HxB%kA3JN8yP*>{q|g>hdpH(XpDiCg2!S49fio=VcoB44k1+@v1j6|I&gR~BP}i!1W}dxVum~jG1`RYBHb{eu5tLdJ-_66!~iRKZo!wC-s`Q@^6j7|1tm_ z0zt0o#I6B#YGJlAwS9dkd~n8wKx$ek{4l1My`Ke|ut;ynhvhGfyJw5^o-n*zbuCA? zhf9Mg+m>76?_>@7F zfww%F*S}r<*g$)Z&)Xqkf{{ioXHV%={{z>MdsF?zLE-}yZ?L!^VSuZOGvW41J-Nka zeL^L=|3fA{fn&82gy4C?_^t-j6>bd2VNv`22Z`mv=XAt(jZgLaa>rP62QV)^8*q0p z=%X{M$UsYe^f*>^{8G=xO>KuhOE!(J-t+lzmP)koS=clqLm~MGY&`lC67UH_Lwfo> zHpH=}cRwel2}V@O$5& zdzTD(4>-T|-Ym14Sdmk>{lKHI4?plNTw_BVoB&EJ%efnw*5sPHs55En1qRcc z?vd5|`-)&escP4EnUC{eB!;0?>`f9L5M2C=YumJB%ke+xQ~`MbJCi?>m42G7EV#;= zjLs|UAO2Pg&E)^$O6<1=x{JTO%4I@kS??ZJeQ(|Hh7+w`8}4K8Qs6%lKxsHmD z*(aE5txl3FerW&eCB(Wy1X2^3RAR%rX(>W*jI7eg-N-5*UlT5=qidP_Z1zcnTa&n; zklNS5$3xQWde2ikB@X1}2v^UZnBKonGj-+rxMU~wD=Y`qLnQ| z*DI7-dBw8i6BpC^Z&a>2PN|em4F>P#&g&VOE}GV24i_)ynwN*eY;M3<+yGL+0HVO| zYsYf)@Hj|NtoCR1-{=>l$9D_74={8s{^n4l8e_ob9vmPHfsY{pfB-tI%ecs@sxg|# zzuu@6q+=Hcb!UB_Q4VsvxFwRpozu|%5Z0jF$c`cYj?Y?ttk`h$%gZs}b0n9T{Kp^bXKwgG zWBBuR%|&Hgx$)Sig-3penebOG&VGRc?)H&e81xLA-W$FGd4cY}-f!2Y&X+0A$v02S zMtHbxRuwgS%5a#b*@=)=Q*~JXK$N{E7aAU))wI1Bx&MRS*=@o=_gv@dCzr!a{?T8y zX{DDU1IE9^U1Cy^gZR={+IVa8qu{>BlBFZccEJHS(=+kngf5Z+?G#Iia-W`#S0*X_ z19DfJ>ZVbIiuV#ayO!ESZ*9sUB>&A@bILp3fHf6!}Y!y|Sy zvfE@xSlDz`!OAp=vUl(*o}yrTL372v3By|;9{ng2cC58gT<&-l^r z0XBKXWuOSM&> zt$iVX2EU~gE8N73{%Tc%E-vnD^4n;wB%iwN`T03Bd%p|B$c}~lII|dIHltC$Ht*|a z2Jun+s@^k6bIX34?TT!sBuOUIuJ1v$7ZvL&+ipR$Aw2L&a`g6AT)kpp+ph>Y=UJJs zCfGFf_s@-{@%@^m`qTevseh!3NqIRF6wJRfuWldjv28+&M05NBk|*G!`6;MZF%ylU zSRbmlju)8Pcx}c$GCRx^m+X|V*W7sT#chOkt_crdN zs>Y5n08RnVpc>f1YZQi+-+s-d5@etwOw%AfTo3=R*3ohh@EDuPAGV@4LTL@%a3mwW zEfI_j$g8fCj3+6S+W!K)3ZYS2<(F4~Ap@{&lnBrijTLFRpEv%H5}paJ{oK{6#v?a| z-;3$iUHD$M54E&|M*SvyhIO)QA(rqHepqtS%%x5&5O$e9QUo-Vf$k;0l(KjM^|)Sa z>fKo5QFqDG(POG9k_H(afWIiEx`H82nWT+%@@GLY_eW7RQGdv!+mFYI07x64TwGY^ z#*Tb^y9O}fZt=qQG5>RAJy-| zlc2_m+nsJch4;n!pe2Jk!kCi) z)+8$o7X*LoPpM9m(f-G__D|nc73-_^yua(lYdzQ+?jy6 zm{b$lp)FyvbC*2{*A)lY$?QWN1kP?(Z9v>~FD}=!BAlB^ww!T*Mf=+2B>@XXx+cbq z@-9k{{-EvQr$z?ESZn=(dH}crLwOU;$JDoA>$PdiS9$-|$qZ->2v)W`L~(>b!-Rq2 z3OHO-vRHWk@q8Pvd$tht=X!bcpaxZZZDFmnbYgaXO6{=weNWs*`XT);cc$= z2NpS`t}O}NmMAKa;?9tvbIImoy<i8%RS`bkQ%HQIj%qTdu zTD80ysk`)D@a?c(n1EgV^lL8C21gb&E$~ya52F-LgSI+B<_vz%@vq}+^^F|sSzIY= zP4SFk1mQpaf|v|V*L!P#S5|AFzfRDwbnm=?>i)J?!_efwn3vhJw^?krepitszoa>y zO{DuKTd*ckkB4iu5@Q__Gls_IC7{cp<&j9~O;r*LP!)VNfwgb%5gW<``4e59Bv+D# zWUMC0K~jtpweTzHU1+=!k28MQq|dSH$4yBfpTUKR=FkKOSsA#QjNc3tZ^cdV>l2>s z_0K3Mb2g}}A3%oooM>F52NziP0GAn<@O^vu^xHJ^vIhZdGlZLGk)a(cT1tb+FEpNM zW|&Z;7y0xTX(7T4bk6qJ?8f0hp*7j!^OVyH*P9JWk;U?w&0jjOZoTE(Yg44g{slgX z`r=a4UOID|HB8i2o@LzOHl-7JZb8K5<)lRV$@ zJs+|cu=G0CEwZt=ec1yHkWl#5L^D(Cl?Q0;rCfUF-vizc?!x@Kax7b`W`sLMW z>=0|*Gd|Rw0qSkUN+P@^d}VVKrko%v9d)U%Gc25#gkbHh#{1liQnB$aJg%SZ5fx^T zf$J2Jvwv*Bgm?~ZR8}R%S&*NlNE1&Ru?dcSIc))Pmn$B^0GmVYN`F^&tW8Xj z`S%RFL(Q3M71>kt(ESjY2^xT`wiQ1UwL@KH;NrNjH6B3e8Uy8|Hqb52+Uh3E&vIH4D5zA@ z(1Lf@)QE$nxaFSKFD_kWA$%1HBE1^=h5;AKY)|3UMk;->RtLL|6Qh8VtsGwg%acYC zq0RkNDNhYP&>qYZHw=yu>qKDJ|qt=7WkF23rZBmuZUr*jD{h`8& zGyz@4CRj+=eplb=pYCl2zW5t{{c2a9#cse=X2a&&2AbD|d*RpetKX`KwBD@cgio7Y zKC7z|KLyCQN;_-ltKrIL+7D=;lrRu_CXL_%)yrb(MrUfu&X2CjiR-Up=TFZBm=r$x zxu(ph$m(XCs<7@s8()8WI=e*GOX@j zL5@Z2M4|7a1u`W3y!3xUHf@Z1IUSBkgnD$7?4%5*V=Dfo(Hu;ENBOs~ce8gbW%Khe zs~D26`d`4jw`DKY(noZL1iYQ3qM`n_pG zwbx2YzBb`cWXk{TR*Nr$gzJFU)}IVuMH@)20L&^EoyY-oDlzGz4sEONx3#H^UTD318LVrC~;URN!3YL za_OCE>l$TTMAoviU}^=Y8YodIlx#v}ZZ%vp_gh*Jw@XI#dN=gddgf9`=y06AmW4Yv z@B4=20MKjlrAdu)R0&<^jZG@FxrRX!dET#2;<%)b7(FQKt^R>ECp5|HY6Q4l^=}Yr zq=lf0CuWYggOIKrbGi2glhKr;qF4^rBv`x;A}{&+Ij`nrV=z*;0Ejd11%Aq!z55IZ zW<|Cf(^RnMx9-*0Zrf*3l>^iQ%=cTvop3Vz5>yuI-_X6>hmc{HdPhzk&c~TcL(i{F zd#?W@Hl(|Ec6e_ax#~0vs>lXZ+9N{t?Bb0;b=%(l51zj}LMH4*z~VYH%6qGomfvaA z?rS*#)*Z2u&=*RB>p6ASLwuB(xaX?U{sLQe@rO1{7D?VIwIZcSRWc)M$|&v=s3r%r zHyS00XtT-Ua!3jcry44SVF{*Dq$Z>_mS6g7QF@Zg6d9#L3!yQ?kQ+31% z47SJ@XaY2!RxZ{1!L)U`#~AcBC%ukMlF){fg;F=tC7PnKCX%?S}db7bNEnYU|UB9a^Z zlg{??p1GhpIk#oC8iK|@!0-p$>;y^J(7|0TeOiu+58do|Pzry~1GSugQ6|2y3{*i=$OVFl?Hf^KW=oU*|-Vwt4-c z`(4U$b!CP2&+UH&^@F?al`lPdWX{QXoR@*HHzl{N3ry65p6C8RLsw?xmE)a|BQ2)% z%$q0!fOB#y&c!zX&Cj`35+GvpT=a50UUgt}`h1#)(t3*nTXIOJ*aiOED~28D_pQ>7DFn0xi(Va%i*Wuk#MI^&)iJq z7GQvjx4F;)j_7=r&>q1MJ$tiyC~LanyNJN-Wa@JKxI%$~MS8ORd|D+36kjCRVT|@7 z;qum{w#g{~S9;O5x-z#=vx`^+FOIM2`e3u!go~TJ+QvbFW;UdkWqz45UhIVzO9Htm zHsrjGzTnxuP}_Hxl!rbMZUFQl8JH<7+{}Yfvir2GE@~KRYm$~fH=;q{M=8~nUziGn zk;0cp%||fgVp-N0hfme%+jPa+TqMOm)$MpEP`v6ZCrYyZG<>mEL*X`XBr7O{e5Sow zW#s?0qNj= z&P#k99cjCE^5~%YZcMtY`QlOI-6$?s&ehaw`VBiKX=+hGeMLr2;le2ZCD_XO>U`*> z$l|8Y?2myxsJQ%cF6)CZcBIdDx~(+?ghl$DA??>}(7*S^yZ75dz#b(2ACm7X2#0^YMm_`D!2$( zlO2pF(!`<6d_UxK0j|6{L63p2Jy(7QU_cS+2k0MBuCxQfri1t!+lllTKx$qEh{t0L zI8Ora>7mqZAu1q(bB+b}F2t)5b(m4}#OB;#PlY38zi$#VEpSeDLf+27Ez@kc_V zF~DpJ#uOZ;#Koh6^A_p7tCI|#k^;nSPmr({yNIF=b6b~(vSM%W=+iO8XkPuC(9}>C zQX~5ddSSU+gQpClTmrZRiV+JhGf4nY+o#K7`Y^~hOf=y>6wfh{62u*9=veS;3SEyz zryp&~#v2_(x@H4i={0R918=n^0ucJ2zRyh}lL)pvjmI%padv+C+tGg9h{$6^4o1;k zJ`cD505GM&J`M6H{R@D$Q|`w2NK@kbKYCpz4ssZe4dSBf4EFXSk}rKqES|gln`Q$5T$D-jMa?wUuC(HZtbC+Oj>3+i_;m$@4jH9gOP%O+ zNImUi!zvq{COo&A2k@y`NqLWVrp+$vi{P*yY6WrxA?6&J>2!mqaTk+9A20t_ z&B=Ub)c&}t+fmc(&0L5e_+PHPow*bdc82x2;?{^a1mLnA`<(!vR7p8xJbPwa8F6=~P4Hhlp8&)YN zhHisg?{ajE2V8b#lG0J%Qcf~s;HSRe{o#c;R4g6Bd{+ZjnbE_a_edGkc(E!#$j+=^2-bn`EubSefH|cn z2>ituVlWKi2Ucwv3U+@p{xsvk@iyK+YZU&R0%+5?6RB+gR86z&rcXEwRT?0)wmJdT zdyXwyFU-XEp!72zvLxDq>_d(sv|Z1|(L^0Pj`~J@>!@%fKuDN!2SsY6C^IPf_U*qv zEsK>N_0y+@hY#_QM8D>Yt}ke_g7S;3?DBPm(j(-q#fK?0CWR%MOj~<}~=aU;V=_lrz!Q*(PM&2y#cp=8oWbO%k2RN#^TPCwRFSzDf z<4J_#W~-}QaT(abhi#FO+YD8*4w^dQka}DFouyI)EjdQ31uipx*@Ng>g^C`ANw&Pt zkefEL82#R*5kX@{hw&e}`@rX?WcyTGJinzS**~f)4c|gx1-bIhr2VbHl4*T!R43z& z%WqEWhY+cyBy!d#t4C@^B>lrVI;;(N7rU}igaJn#!67Fwbv5fTSrw1v2gjhEH?U|t ztoS356_NfRXO?voLB&ixmH}xyUb^~q@rN(0`|eTeOQaK(k&n;BJsH{3);P;;1z$vX zSf-t;?#$W$(HX`4%X_z3{})*2yyZRhWmwxIpSG~(Gm{}EfYqRd5XIhvxhnFYfy398 zZjw(h-c&oFmQ1)d9MrBaFt;0#F66#03GVx4~ovLMoZ0Uloyczm+icTPbj3QUJ09%gjV{jv}C;O;gEmi=Qkygqxv zCH+p&ML^2W0ax-M;NBHE-=nG986VX_e@$DsiZR-sWq=EVY2M}oi&rN6W<{!G2RT78 z+)XJH94iLI)H3~=D|9MVLVXLoT9H8utE^}_mY-#@8Z2%4`;A{!Qc~N7zapAR*T=hLhrIZb_Jn#(jPtzLh8cKyk&rQE=<2OYL%Y} z+|+g0w5npiv5bLMIrs^}2M4V09jMbUdU!y2Y`9B6y&y*+K(U6o0U;G^)IJ48nb3ED zb4<;REm=)d{2Ly3;byEx!j4(D`BA;=GIvsbQYW6a0q#}mkSZ|C(Uob-DRo<$$uAgx zWt9)K@F6KM2KA~|W&!pq zAI{>yZII4!6#h*C0q5nAmP@}(M$nX%cbJB@zr*&iSo0Ha$LuaRv6}9y8t5`{9!$S5&=>v|(5QzGY>_s=qSf zb0Y=-Mcvh|Pqk&!SaCSqp{>QgYOR>!-#ug{#%yQUpX8h0%pARs z`%iYWTkRodh71(sHP!U%*WSMZnl|1fX2+cH5+H1x|!?|NY;GcUz2s5|7qSiO$?w5d*oOP~D&EYalPAXv>qDY{20$1aEv> zg*V_xDleiqdi<(&H+^Ym^)GnAUbFf?X5O3&<6RE{MHsX}!RI)ms$8-%x)Fh8cc{~|y^Q>uwc?%t^K80>VP|oS=tmh07n?N^d^?J?ucYI=U{P1m z!~OmA?}LJZ- z{3|OAH}x8rJn{^DA2RQMR2!Dn%Ubos_GAaG@B9?VS=#o{0K)a#z9`wwu#e~k2H))d zrq}9XE6IHAA+yEj)6Z^hIlTr|M(+wDU5GEIJ7r+v7x@DlFre2P&Gm%Zu>6?Q>2)r| zgSjDEwL61)IrB3HP2*f#?S^e-{ap~aX%f>j20?K?XBT}*B?mS&yRo!PZCA-gU3t1b z!zKe`Q`CU#o279&ezd2cknfXWrz;7{zcimPX=! z?yFBUm9a?*W?W1V&*?Y$B6_qPQKeu&7k-}ROJ&ICW-CZn!{IDLmxy5?{73I1c9`a6 z18d7DIlvfACH%58^QXnrJ1lOm5eec*_58lWt0Qkd;E9_F*qzru9_{RVBo=$0p%0e3 z;FY&Hn;kyo0A<4llRFAwRCsUzX|(Y&#)V!a+EK?*znux^C4sD%Cp$x-B&j#~R))b* zjG>73Ckr{+uQ%*WDBA(_Qc8CyQ7MI?a_x2&MLfgb+2>xpwDV9!9Q=@<_}@@@H(()) zdOMR-CV?u`lehkxunAj=OXhUEc=%_SstEva?0*Kh~{KUo*&b|D} z)&dRwuOg$Qxt>(ZI^Wl{I URL? { + switch schemeType { + case .query: + guard let item = item as? String else { + return nil + } + + return createURL(for: .query, with: item) + + case .url: + // The first URL found within item url absolute string + guard let item = (item as? URL)?.absoluteString, + let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue), + let match = detector.firstMatch(in: item, options: [], range: NSRange(location: 0, length: item.count)), + let range = Range(match.range, in: item), + let queryURL = URL(string: String(item[range]))?.absoluteString else { + return nil + } + + return createURL(for: .url, with: queryURL) + } + + } + + private func createURL(for schemeType: SchemeType, with value: String) -> URL? { + var queryItem: URLQueryItem + var components = URLComponents() + components.scheme = Bundle.main.infoDictionary?["BRAVE_URL_SCHEME"] as? String ?? "brave" + + switch schemeType { + case .query: + queryItem = URLQueryItem(name: "q", value: value) + components.host = "search" + case .url: + queryItem = URLQueryItem(name: "url", value: value) + components.host = "open-url" + } + + components.queryItems = [queryItem] + return components.url + } + + private func openBrowser(with url: URL) { + var responder = self as UIResponder? + + while let currentResponder = responder { + let selector = sel_registerName("openURL:") + if currentResponder.responds(to: selector) { + DispatchQueue.main.asyncAfter(deadline: .now() + 0) { + Thread.detachNewThreadSelector(selector, toTarget: currentResponder, with: (url as NSURL)) + } + } + responder = currentResponder.next + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + self.done() + } + } +} diff --git a/App/ActionExtension/de.lproj/InfoPlist.strings b/App/ActionExtension/de.lproj/InfoPlist.strings new file mode 100644 index 000000000000..9f13012d14ae --- /dev/null +++ b/App/ActionExtension/de.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "In Brave öffnen"; diff --git a/App/ActionExtension/en.lproj/InfoPlist.strings b/App/ActionExtension/en.lproj/InfoPlist.strings new file mode 100644 index 000000000000..54f21c1433bb --- /dev/null +++ b/App/ActionExtension/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Open in Brave"; diff --git a/App/ActionExtension/es.lproj/InfoPlist.strings b/App/ActionExtension/es.lproj/InfoPlist.strings new file mode 100644 index 000000000000..7691296b6317 --- /dev/null +++ b/App/ActionExtension/es.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Abrir en Brave"; diff --git a/App/ActionExtension/fr.lproj/InfoPlist.strings b/App/ActionExtension/fr.lproj/InfoPlist.strings new file mode 100644 index 000000000000..95c4d521a055 --- /dev/null +++ b/App/ActionExtension/fr.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Ouvrir dans Brave"; diff --git a/App/ActionExtension/id-ID.lproj/InfoPlist.strings b/App/ActionExtension/id-ID.lproj/InfoPlist.strings new file mode 100644 index 000000000000..e85716303f0a --- /dev/null +++ b/App/ActionExtension/id-ID.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Buka di Brave"; diff --git a/App/ActionExtension/it.lproj/InfoPlist.strings b/App/ActionExtension/it.lproj/InfoPlist.strings new file mode 100644 index 000000000000..2f8fd7dbcf50 --- /dev/null +++ b/App/ActionExtension/it.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Apri con Brave"; diff --git a/App/ActionExtension/ja.lproj/InfoPlist.strings b/App/ActionExtension/ja.lproj/InfoPlist.strings new file mode 100644 index 000000000000..dddf57b7a8e7 --- /dev/null +++ b/App/ActionExtension/ja.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Brave で開く"; diff --git a/App/ActionExtension/ko-KR.lproj/InfoPlist.strings b/App/ActionExtension/ko-KR.lproj/InfoPlist.strings new file mode 100644 index 000000000000..dc2000c1fb27 --- /dev/null +++ b/App/ActionExtension/ko-KR.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Brave에서 열기"; diff --git a/App/ActionExtension/ms.lproj/InfoPlist.strings b/App/ActionExtension/ms.lproj/InfoPlist.strings new file mode 100644 index 000000000000..9ab3d0adb920 --- /dev/null +++ b/App/ActionExtension/ms.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Buka dalam Brave"; diff --git a/App/ActionExtension/nb.lproj/InfoPlist.strings b/App/ActionExtension/nb.lproj/InfoPlist.strings new file mode 100644 index 000000000000..18cff32bf59d --- /dev/null +++ b/App/ActionExtension/nb.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Åpne i Brave"; diff --git a/App/ActionExtension/pl.lproj/InfoPlist.strings b/App/ActionExtension/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000000..3984566458e0 --- /dev/null +++ b/App/ActionExtension/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Otwórz w Brave"; diff --git a/App/ActionExtension/pt-BR.lproj/InfoPlist.strings b/App/ActionExtension/pt-BR.lproj/InfoPlist.strings new file mode 100644 index 000000000000..48c8128a101f --- /dev/null +++ b/App/ActionExtension/pt-BR.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Abrir no Brave"; diff --git a/App/ActionExtension/ru.lproj/InfoPlist.strings b/App/ActionExtension/ru.lproj/InfoPlist.strings new file mode 100644 index 000000000000..0033dfb98d43 --- /dev/null +++ b/App/ActionExtension/ru.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Открыть в Brave"; diff --git a/App/ActionExtension/sv.lproj/InfoPlist.strings b/App/ActionExtension/sv.lproj/InfoPlist.strings new file mode 100644 index 000000000000..085ddcd7ba93 --- /dev/null +++ b/App/ActionExtension/sv.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Öppna i Brave"; diff --git a/App/ActionExtension/tr.lproj/InfoPlist.strings b/App/ActionExtension/tr.lproj/InfoPlist.strings new file mode 100644 index 000000000000..bba0c31405d1 --- /dev/null +++ b/App/ActionExtension/tr.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Brave ile Aç"; diff --git a/App/ActionExtension/uk.lproj/InfoPlist.strings b/App/ActionExtension/uk.lproj/InfoPlist.strings new file mode 100644 index 000000000000..cddfc50b655e --- /dev/null +++ b/App/ActionExtension/uk.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "Відкрити в Brave"; diff --git a/App/ActionExtension/zh-TW.lproj/InfoPlist.strings b/App/ActionExtension/zh-TW.lproj/InfoPlist.strings new file mode 100644 index 000000000000..385feccc82c0 --- /dev/null +++ b/App/ActionExtension/zh-TW.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "以 Brave 開啟"; diff --git a/App/ActionExtension/zh.lproj/InfoPlist.strings b/App/ActionExtension/zh.lproj/InfoPlist.strings new file mode 100644 index 000000000000..7b4dbc939bc0 --- /dev/null +++ b/App/ActionExtension/zh.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "在 Brave 中打开"; diff --git a/App/Client.xcodeproj/project.pbxproj b/App/Client.xcodeproj/project.pbxproj index ec74ed2b7a14..0746d6480157 100644 --- a/App/Client.xcodeproj/project.pbxproj +++ b/App/Client.xcodeproj/project.pbxproj @@ -55,9 +55,13 @@ 2F4A572529E608CC003454F8 /* BrowserIntents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 27D67621282DAD3700BCE16E /* BrowserIntents.intentdefinition */; settings = {ATTRIBUTES = (no_codegen, ); }; }; 2F6931B7260CFB3700ECEB38 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6931B6260CFB3700ECEB38 /* IntentHandler.swift */; }; 2F6931BB260CFB3700ECEB38 /* BrowserIntents.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 2F6931B4260CFB3700ECEB38 /* BrowserIntents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 2FC7DF7B2B5AE98E0092553B /* ActionExtensionIcons.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2FC7DF7A2B5AE98E0092553B /* ActionExtensionIcons.xcassets */; }; 2FD860C229C3D677005AADD1 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A1DF485244A2ECB00541FE4 /* NetworkExtension.framework */; }; 2FD860C529C3D686005AADD1 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD860C429C3D686005AADD1 /* PacketTunnelProvider.swift */; }; 2FD860CA29C3D686005AADD1 /* BraveWireGuard.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 2FD860C129C3D677005AADD1 /* BraveWireGuard.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 2FE7D51D2B509DA40039FBA4 /* UniformTypeIdentifiers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FE7D51C2B509DA40039FBA4 /* UniformTypeIdentifiers.framework */; }; + 2FE7D5222B509DA50039FBA4 /* ActionToBraveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE7D5212B509DA50039FBA4 /* ActionToBraveViewController.swift */; }; + 2FE7D5292B509DA50039FBA4 /* ActionExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 2FE7D51B2B509DA40039FBA4 /* ActionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 441A6360272445F9001492C3 /* StatDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 441A635F272444DE001492C3 /* StatDataModel.swift */; }; 5E8CD8E123D5E3DA00548FC0 /* libarchive.2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E8CD8E023D5E3D100548FC0 /* libarchive.2.tbd */; }; 5EE5918123A290E000E8E8DE /* CoreNFC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F926647A234D4EF400359492 /* CoreNFC.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; @@ -104,6 +108,13 @@ remoteGlobalIDString = 2FD860C029C3D676005AADD1; remoteInfo = BraveWireGuard; }; + 2FE7D5272B509DA50039FBA4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F84B21B61A090F8100AAB793 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2FE7D51A2B509DA40039FBA4; + remoteInfo = ActionExtension; + }; CA8B4AE3276A830F002120F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = F84B21B61A090F8100AAB793 /* Project object */; @@ -133,6 +144,7 @@ CA8B4AF0276A8339002120F7 /* BraveWidgetsExtension.appex in Embed App Extensions */, 27F4439F2135E11200296C58 /* ShareExtension.appex in Embed App Extensions */, 2FD860CA29C3D686005AADD1 /* BraveWireGuard.appex in Embed App Extensions */, + 2FE7D5292B509DA50039FBA4 /* ActionExtension.appex in Embed App Extensions */, 2F6931BB260CFB3700ECEB38 /* BrowserIntents.appex in Embed App Extensions */, ); name = "Embed App Extensions"; @@ -259,9 +271,32 @@ 2F93A97D29C8CDE600C7C158 /* BraveWireGuardEnterprise.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = BraveWireGuardEnterprise.entitlements; sourceTree = ""; }; 2F93A97E29C8CF1300C7C158 /* BraveWireGuardDev.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = BraveWireGuardDev.entitlements; sourceTree = ""; }; 2F93A98029C8CFAF00C7C158 /* BraveWireGuardRelease.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = BraveWireGuardRelease.entitlements; sourceTree = ""; }; + 2FC7DF7A2B5AE98E0092553B /* ActionExtensionIcons.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ActionExtensionIcons.xcassets; sourceTree = ""; }; 2FD860C129C3D677005AADD1 /* BraveWireGuard.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = BraveWireGuard.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 2FD860C429C3D686005AADD1 /* PacketTunnelProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketTunnelProvider.swift; sourceTree = ""; }; 2FD860C629C3D686005AADD1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2FE7D51B2B509DA40039FBA4 /* ActionExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ActionExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 2FE7D51C2B509DA40039FBA4 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = SDKROOT; }; + 2FE7D5212B509DA50039FBA4 /* ActionToBraveViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionToBraveViewController.swift; sourceTree = ""; }; + 2FE7D5262B509DA50039FBA4 /* ActionExtension.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = ActionExtension.plist; sourceTree = ""; }; + 2FE7D54A2B50A11A0039FBA4 /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D54C2B50A12E0039FBA4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D54D2B50A1860039FBA4 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D54E2B50A1950039FBA4 /* zh-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-TW"; path = "zh-TW.lproj/InfoPlist.strings"; sourceTree = ""; }; + 2FE7D54F2B50A1AC0039FBA4 /* id-ID */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "id-ID"; path = "id-ID.lproj/InfoPlist.strings"; sourceTree = ""; }; + 2FE7D5502B50A1BC0039FBA4 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D5512B50A1DF0039FBA4 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D5522B50A22D0039FBA4 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D5532B50A23B0039FBA4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D5542B50A2470039FBA4 /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D5552B50A2560039FBA4 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D5562B50A2610039FBA4 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D5572B50A2990039FBA4 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D5582B50A2B00039FBA4 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; + 2FE7D5592B50A2C00039FBA4 /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "ko-KR.lproj/InfoPlist.strings"; sourceTree = ""; }; + 2FE7D55A2B50A2CD0039FBA4 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D55B2B50A2DF0039FBA4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 2FE7D55C2B50A2EA0039FBA4 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; 441A635F272444DE001492C3 /* StatDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatDataModel.swift; sourceTree = ""; }; 445ABC0527319C000089710D /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/BraveWidgets.strings; sourceTree = ""; }; 445ABC0727319C030089710D /* zh-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-TW"; path = "zh-TW.lproj/BraveWidgets.strings"; sourceTree = ""; }; @@ -386,6 +421,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2FE7D5182B509DA40039FBA4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2FE7D51D2B509DA40039FBA4 /* UniformTypeIdentifiers.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CA0391AF271E1023000EB13C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -546,6 +589,17 @@ path = BraveWireGuard; sourceTree = ""; }; + 2FE7D51E2B509DA50039FBA4 /* ActionExtension */ = { + isa = PBXGroup; + children = ( + 2FE7D5212B509DA50039FBA4 /* ActionToBraveViewController.swift */, + 2FE7D5262B509DA50039FBA4 /* ActionExtension.plist */, + 2FE7D54B2B50A11A0039FBA4 /* InfoPlist.strings */, + 2FC7DF7A2B5AE98E0092553B /* ActionExtensionIcons.xcassets */, + ); + path = ActionExtension; + sourceTree = ""; + }; 7B604FC11C496005006EEEC3 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -563,6 +617,7 @@ 27262B4C28BEB3D800A2E526 /* Intents.framework */, 273ACA2128492ECB008A58BB /* JitsiMeetSDK.xcframework */, 273ACA2228492ECB008A58BB /* WebRTC.xcframework */, + 2FE7D51C2B509DA40039FBA4 /* UniformTypeIdentifiers.framework */, ); name = Frameworks; sourceTree = ""; @@ -640,6 +695,7 @@ 0A66550D23E9EA540047EF2A /* Brave_iPad.xctestplan */, 0A24F7DE233E8EF2004D2F3A /* Config */, 270ECFC9283824F00089B8B7 /* iOS */, + 2FE7D51E2B509DA50039FBA4 /* ActionExtension */, 27F443962135E11200296C58 /* ShareExtension */, 2F6931B5260CFB3700ECEB38 /* BrowserIntents */, CA0391B7271E1023000EB13C /* BraveWidgets */, @@ -660,6 +716,7 @@ 2F6931B4260CFB3700ECEB38 /* BrowserIntents.appex */, CA0391B2271E1023000EB13C /* BraveWidgetsExtension.appex */, 2FD860C129C3D677005AADD1 /* BraveWireGuard.appex */, + 2FE7D51B2B509DA40039FBA4 /* ActionExtension.appex */, ); name = Products; sourceTree = ""; @@ -739,6 +796,23 @@ productReference = 2FD860C129C3D677005AADD1 /* BraveWireGuard.appex */; productType = "com.apple.product-type.app-extension"; }; + 2FE7D51A2B509DA40039FBA4 /* ActionExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2FE7D5312B509DA50039FBA4 /* Build configuration list for PBXNativeTarget "ActionExtension" */; + buildPhases = ( + 2FE7D5172B509DA40039FBA4 /* Sources */, + 2FE7D5182B509DA40039FBA4 /* Frameworks */, + 2FE7D5192B509DA40039FBA4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ActionExtension; + productName = ActionExtension; + productReference = 2FE7D51B2B509DA40039FBA4 /* ActionExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; CA0391B1271E1023000EB13C /* BraveWidgetsExtension */ = { isa = PBXNativeTarget; buildConfigurationList = CA0391D1271E1026000EB13C /* Build configuration list for PBXNativeTarget "BraveWidgetsExtension" */; @@ -786,6 +860,7 @@ 27F4439E2135E11200296C58 /* PBXTargetDependency */, 2F6931BA260CFB3700ECEB38 /* PBXTargetDependency */, 2FD860C929C3D686005AADD1 /* PBXTargetDependency */, + 2FE7D5282B509DA50039FBA4 /* PBXTargetDependency */, ); name = Client; packageProductDependencies = ( @@ -817,7 +892,7 @@ attributes = { DefaultBuildSystemTypeForWorkspace = Latest; LastSwiftMigration = 0700; - LastSwiftUpdateCheck = 1420; + LastSwiftUpdateCheck = 1500; LastUpgradeCheck = 1250; ORGANIZATIONNAME = Mozilla; TargetAttributes = { @@ -831,6 +906,9 @@ 2FD860C029C3D676005AADD1 = { CreatedOnToolsVersion = 14.2; }; + 2FE7D51A2B509DA40039FBA4 = { + CreatedOnToolsVersion = 15.0; + }; CA0391B1271E1023000EB13C = { CreatedOnToolsVersion = 13.1; }; @@ -896,6 +974,7 @@ targets = ( F84B21BD1A090F8100AAB793 /* Client */, 27F443942135E11200296C58 /* ShareExtension */, + 2FE7D51A2B509DA40039FBA4 /* ActionExtension */, 2F6931B3260CFB3700ECEB38 /* BrowserIntents */, CA0391B1271E1023000EB13C /* BraveWidgetsExtension */, 2FD860C029C3D676005AADD1 /* BraveWireGuard */, @@ -925,6 +1004,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2FE7D5192B509DA40039FBA4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2FC7DF7B2B5AE98E0092553B /* ActionExtensionIcons.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CA0391B0271E1023000EB13C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1016,6 +1103,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2FE7D5172B509DA40039FBA4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2FE7D5222B509DA50039FBA4 /* ActionToBraveViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CA0391AE271E1023000EB13C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1069,6 +1164,11 @@ target = 2FD860C029C3D676005AADD1 /* BraveWireGuard */; targetProxy = 2FD860C829C3D686005AADD1 /* PBXContainerItemProxy */; }; + 2FE7D5282B509DA50039FBA4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2FE7D51A2B509DA40039FBA4 /* ActionExtension */; + targetProxy = 2FE7D5272B509DA50039FBA4 /* PBXContainerItemProxy */; + }; CA8B4AE4276A830F002120F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = CA0391B1271E1023000EB13C /* BraveWidgetsExtension */; @@ -1151,6 +1251,31 @@ name = InfoPlist.strings; sourceTree = ""; }; + 2FE7D54B2B50A11A0039FBA4 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 2FE7D54A2B50A11A0039FBA4 /* ms */, + 2FE7D54C2B50A12E0039FBA4 /* ja */, + 2FE7D54D2B50A1860039FBA4 /* it */, + 2FE7D54E2B50A1950039FBA4 /* zh-TW */, + 2FE7D54F2B50A1AC0039FBA4 /* id-ID */, + 2FE7D5502B50A1BC0039FBA4 /* pl */, + 2FE7D5512B50A1DF0039FBA4 /* nb */, + 2FE7D5522B50A22D0039FBA4 /* uk */, + 2FE7D5532B50A23B0039FBA4 /* es */, + 2FE7D5542B50A2470039FBA4 /* zh */, + 2FE7D5552B50A2560039FBA4 /* de */, + 2FE7D5562B50A2610039FBA4 /* sv */, + 2FE7D5572B50A2990039FBA4 /* ru */, + 2FE7D5582B50A2B00039FBA4 /* pt-BR */, + 2FE7D5592B50A2C00039FBA4 /* ko-KR */, + 2FE7D55A2B50A2CD0039FBA4 /* fr */, + 2FE7D55B2B50A2DF0039FBA4 /* en */, + 2FE7D55C2B50A2EA0039FBA4 /* tr */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; 59B6912121B695A400E9388E /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -2442,6 +2567,303 @@ }; name = Beta; }; + 2FE7D52A2B509DA50039FBA4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = ActionExtensionIcons; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = ActionExtension/ActionExtension.plist; + INFOPLIST_KEY_CFBundleDisplayName = ""; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(inherited).$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2FE7D52B2B509DA50039FBA4 /* Debug (AppStore) */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = ActionExtensionIcons; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = KL8N8XSYF4; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = ActionExtension/ActionExtension.plist; + INFOPLIST_KEY_CFBundleDisplayName = ""; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(inherited).$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "Brave iOS - Development Action Extension"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug (AppStore)"; + }; + 2FE7D52C2B509DA50039FBA4 /* Dev */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = ActionExtensionIcons; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = ActionExtension/ActionExtension.plist; + INFOPLIST_KEY_CFBundleDisplayName = ""; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(inherited).$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Dev; + }; + 2FE7D52D2B509DA50039FBA4 /* Enterprise */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = ActionExtensionIcons; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = L6556KQ6XT; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = ActionExtension/ActionExtension.plist; + INFOPLIST_KEY_CFBundleDisplayName = ""; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(inherited).$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Enterprise; + }; + 2FE7D52E2B509DA50039FBA4 /* Release (AppStore) */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = ActionExtensionIcons; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = KL8N8XSYF4; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = ActionExtension/ActionExtension.plist; + INFOPLIST_KEY_CFBundleDisplayName = ""; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(inherited).$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "Brave iOS Action Extension"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Release (AppStore)"; + }; + 2FE7D52F2B509DA50039FBA4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = ActionExtensionIcons; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = KL8N8XSYF4; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = ActionExtension/ActionExtension.plist; + INFOPLIST_KEY_CFBundleDisplayName = ""; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(inherited).$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2FE7D5302B509DA50039FBA4 /* Beta */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = ActionExtensionIcons; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = ActionExtension/ActionExtension.plist; + INFOPLIST_KEY_CFBundleDisplayName = ""; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(inherited).$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Beta; + }; CA0391C0271E1026000EB13C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3039,6 +3461,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + 2FE7D5312B509DA50039FBA4 /* Build configuration list for PBXNativeTarget "ActionExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2FE7D52A2B509DA50039FBA4 /* Debug */, + 2FE7D52B2B509DA50039FBA4 /* Debug (AppStore) */, + 2FE7D52C2B509DA50039FBA4 /* Dev */, + 2FE7D52D2B509DA50039FBA4 /* Enterprise */, + 2FE7D52E2B509DA50039FBA4 /* Release (AppStore) */, + 2FE7D52F2B509DA50039FBA4 /* Release */, + 2FE7D5302B509DA50039FBA4 /* Beta */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; CA0391D1271E1026000EB13C /* Build configuration list for PBXNativeTarget "BraveWidgetsExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/App/Client.xcodeproj/xcshareddata/xcschemes/ActionExtension.xcscheme b/App/Client.xcodeproj/xcshareddata/xcschemes/ActionExtension.xcscheme new file mode 100644 index 000000000000..380f41463907 --- /dev/null +++ b/App/Client.xcodeproj/xcshareddata/xcschemes/ActionExtension.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +