From 7b08b4d5bdff05c101ce8e1a5ac03a1a927de273 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 25 Jun 2021 22:45:09 -0400 Subject: [PATCH] v0.9.4: added iOS module! Note that this commit includes several changes made iteratively over time, from TestFlight 1.0 to 1.5 --- build.gradle | 3 + ios/.gitignore | 5 + ios/Info.plist | 60 +++++ .../AppIcon.appiconset/Contents.json | 166 +++++++++++++ .../AppIcon.appiconset/Icon-1024.png | Bin 0 -> 16943 bytes .../AppIcon.appiconset/Icon-20.png | Bin 0 -> 484 bytes .../AppIcon.appiconset/Icon-20@2x.png | Bin 0 -> 1875 bytes .../AppIcon.appiconset/Icon-20@3x.png | Bin 0 -> 2597 bytes .../AppIcon.appiconset/Icon-29.png | Bin 0 -> 1099 bytes .../AppIcon.appiconset/Icon-29@2x.png | Bin 0 -> 2551 bytes .../AppIcon.appiconset/Icon-29@3x.png | Bin 0 -> 3441 bytes .../AppIcon.appiconset/Icon-40.png | Bin 0 -> 1875 bytes .../AppIcon.appiconset/Icon-40@2x.png | Bin 0 -> 2877 bytes .../AppIcon.appiconset/Icon-40@3x.png | Bin 0 -> 4085 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 0 -> 4085 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 0 -> 6193 bytes .../AppIcon.appiconset/Icon-76.png | Bin 0 -> 3116 bytes .../AppIcon.appiconset/Icon-76@2x.png | Bin 0 -> 2954 bytes .../AppIcon.appiconset/Icon-83.5@2x.png | Bin 0 -> 6204 bytes .../Banner.imageset/Banner.png | Bin 0 -> 10518 bytes .../Banner.imageset/Banner@2x.png | Bin 0 -> 13398 bytes .../Banner.imageset/Banner@3x.png | Bin 0 -> 17594 bytes .../Banner.imageset/Contents.json | 23 ++ ios/assets/LaunchScreen.storyboard | 38 +++ ios/build.gradle | 43 ++++ ios/robovm.xml | 52 ++++ .../ios/IOSLauncher.java | 103 ++++++++ .../ios/IOSPlatformSupport.java | 235 ++++++++++++++++++ settings.gradle | 2 +- 29 files changed, 729 insertions(+), 1 deletion(-) create mode 100644 ios/.gitignore create mode 100644 ios/Info.plist create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-1024.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-20.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-40.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-76.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png create mode 100644 ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png create mode 100644 ios/assets/Assets.xcassets/Banner.imageset/Banner.png create mode 100644 ios/assets/Assets.xcassets/Banner.imageset/Banner@2x.png create mode 100644 ios/assets/Assets.xcassets/Banner.imageset/Banner@3x.png create mode 100644 ios/assets/Assets.xcassets/Banner.imageset/Contents.json create mode 100644 ios/assets/LaunchScreen.storyboard create mode 100644 ios/build.gradle create mode 100644 ios/robovm.xml create mode 100644 ios/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ios/IOSLauncher.java create mode 100644 ios/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ios/IOSPlatformSupport.java diff --git a/build.gradle b/build.gradle index 6f5095a01..ee880790c 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.13' } } @@ -24,12 +25,14 @@ allprojects { appAndroidTargetSDK = 30 gdxVersion = '1.10.0' + robovmVersion = '2.3.13' } version = appVersionName repositories { google() mavenCentral() + maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } } } \ No newline at end of file diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 000000000..cbe6e69bf --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,5 @@ +#RoboVM build folders +robovm-build/ + +#RoboVM config (we dynamically generate it) +robovm.properties \ No newline at end of file diff --git a/ios/Info.plist b/ios/Info.plist new file mode 100644 index 000000000..f3864fa3e --- /dev/null +++ b/ios/Info.plist @@ -0,0 +1,60 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${appName} + CFBundleExecutable + ${appExecutable} + CFBundleIdentifier + ${appPackageName} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${appName} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${appShortVersionName} + CFBundleVersionString + ${appVersionName} + CFBundleVersion + ${appVersionCode} + LSRequiresIPhoneOS + + UIStatusBarHidden + + UIViewControllerBasedStatusBarAppearance + + UIStatusBarStyle + UIStatusBarStyleLightContent + MinimumOSVersion + 9.0 + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + opengles-2 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UILaunchStoryboardName + LaunchScreen + UIRequiresFullScreen + + CFBundleIconName + AppIcon + ITSAppUsesNonExemptEncryption + + + diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/assets/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..3e00d9b65 --- /dev/null +++ b/ios/assets/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,166 @@ +{ + "images" : [ + { + "filename" : "Icon-20@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "Icon-20@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "Icon-29@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "Icon-29@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "Icon-40@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "Icon-40@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "Icon-60@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "Icon-60@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "Icon-20.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "Icon-20@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "Icon-29.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "Icon-29@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "Icon-40.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "Icon-40@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "Icon-76.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "filename" : "Icon-76@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "Icon-83.5@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "Icon-1024.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-1024.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..044ec3d72cd3ac99fdc30e1756d333315ba326fb GIT binary patch literal 16943 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 N002ovPDHLkV1jA3pp^gs literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..20dff0c3618a00dcfb621c7a65e78ecc6298c85e GIT binary patch literal 2597 zcmV+=3flFFP)Nkl`KyWNNKG88VGcz;8kC~|qOR+uYb(A#q z=JnU=@kddVSl*ej<0f68Cp`Yqn6SRSzP!AGV0Ly^DMpZ{DFPy5W=v2@5fOsnaEQQK zySBE5Aj`5&r-KO#3kwLe)^l@n2so&MhzJ6WQq|;1P^K5`js#J_DDv(@75l~@x@vOH zm3_q8@fneT$T#giM+kzV!59O8h^-r=06U6`@jGT$T-Q(!iU_*s{b84|3r)_N97F((EPlJa$%oj^V11daW+pJ&0KujX6U2z*&WVi32`nZ!j23CNP0Ykd z2pR!dYf%H5BZrRO|AEd4O5L^dan2tRsQn6zW-BO{hwQuC(+=;OLS(6juY3t006fiV zPN9+8S{~j1x#!{g-U=mVn)=JRxG|3(F3D8dIdl*;t=Vf);tqq+$Za|lK(j{wmcWjd)G#Oqp%&*N+IPhxhKZJeKY^NogPu@xJB1makgMr1k|buP!ewj%ffyAOh?v^2Yw=d!rq>5gNIA z>Yrk54RyY}63@)cWZBHr)D)`(5h7Hmd2ZaglYyYQUqhn|!b^-`62+zRpgkqpP<5jVp_P{j;qt>9wn_ zM9D5$5Gs$m#p7Q7%$GaoV7ICgLHB4IDPg;AOMd&F7ZTN`Q-PV^@`<;6`NA(Z4b7*% z;-)`K)u0&tn^u4%zE6+V*H$n718N2fEkJGkwGk@&)BU&p-&p1a{S8gyV-%2qoAnjlB~qB!uHeLOv9597WTPLpCc0&9Hj@ z&z64uN&*24BA~u_rPxCRa01zP?>BXC^?=<(ju7pArsEM&ed2Q&{YJ1WzH=Nzuvd(; zkjAmKwcMr!A`oJkau9=pnZ}MTI6}CEyse;_Djfemu_o+y!>$}VB-T=`~^I6FS+dxpLMW@-4Q{BO$o5rHDh$B zxR9d6gjn2Ib`~B7*#l>-HG#hFy6f}Y3P}r zEpKAe;Q097k;TmC}xLMMTB0u3y0pal~Np88t^W;KYo{PrFJU*7Zck;MsZJ+J z5{)rprW@9ipPzT=cK^0=&s&TT{N{4~x9gQOJ-_ZW&kw`#x@e96az!hOT%6wFh`rZ; z83ez*sC~}W^NamdrA%Yc#fX`CWte{FJo>K#gSl*kU?W!_zh0rq?CMU_P81(BcD{5K zpJ$nBmH?p4hCgGqFp?`h6S1ab!Y-z)TDx5E{N4&-0OpMO|2Jq-Z=7 z0=-W|V3v%u9F7~!Xg%a8GA0qRW~~yXv{GCzng~Kfm?VH~zbz3gU>ssn>|%s~;?Bl3 zL~aa0U@)SYj`B9G>3IzbGZ9wa=QrgupJp5{2e>G*Sh1@XJJR(ZDOhU(hbBH2sCFzk ze$9~`A|lROWAdBVS9|>p#kKo%4WZ`$ z57^h<7N>2+|V-W!r z2d<0&fki-2Aa44|XC!50B3)I)Dm&+fOlu}0U}8-(v)1~Yh0Y(Z;$E*Eo{kVe*M7C8 zlcdT<#DK&Fdnmx8Ab4nCfKH2^VG8 zizXtaRF-9Fnof1{Rx26w2LcgbW_nsFg}^yC`9TD8^KbNwG1aR!HhV?NmY1do6e~~_ z%_8*hYhbS16)8$$KSDoDrF1db-nOEdIZYF-mERMAnIu%*?RJ&YW%|6TI1GRQC?8uX zs*NP-Y>cZGSn;hx(U(~l%|zJT>{Y*4^cjmr0+EmH@mRwxkH$C@zNrXH6-sG(rHA00000NkvXX Hu0mjf2@c-- literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29.png new file mode 100644 index 0000000000000000000000000000000000000000..a143de4a5b760bf2f0bba2a8f8c9dd38df438ff3 GIT binary patch literal 1099 zcmV-R1ho5!P)Besv`rl$hg)-3<*RJr9KYw5HkTS_etaYU_`vw}o@j1z`ywYMl82@;LNLV7lbj)XW@rx={K1EA;Y9kC13Ox2g5o zR$CVL@{=WisBz{8$m7r}0cbFlY$iE1HCdVaz5LqCB$_X4Zoi}5mc_m5A_?%L#+e@= zk3+8nW@e@>F4tmeYGT84J>w(ALVg2sp~0NvY6BbazCp9Nta-ZV|L2Pn&bl~L&9(dY;2ON9A9k(A>`T0f>H4Z+r5+hF+y#kpkc&+yWZXrIr^u6F%S>2D! zGVeunV0o@9?Q-X=s5Jli*#}D{Q)EbzUn8!_=Hf4v%@wVN`}S2EKY8w^wkp3rgYe(E zO1WxZkyYc!)ci2L3%GvYc+R^MO4l|b>IG9vmG$oA^NuOQL;e2#ZJ#-3 z@$@67t)5F}Q5PI&Fcq(7BrvqoT_-3@Wph8cR=Ip1pw^Mv<}TZn3J$TYC_e9KUtjl; zTGP_|wp#Ae`*x(>77TjXVia}}wzXqRy9(EpbvYAGx9)a?9shrKDyDF++D{2|Sx4at zy2`9_#++`|ZF7$)?wm@-cor0PJuby@6FtIpM65^B8Mn|ls}@jR3RlwQ%D9AkT)8`! zO&taGrm*Au_l;F^ zL8wD}>nrvA^wSg%zhv(c3k@yS`S8FJa zGPlv=9u~@dv$%Z!q|k3TE5Q&xB{B3vPCx< RzM}vD002ovPDHLkV1jbD9`OJG literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4ffef47becc660cd458309e2629e25b0475d28 GIT binary patch literal 2551 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 N002ovPDHLkV1m~75h(xw literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e2714cabeb5a20bc48a2b16bdef965ce9948e6 GIT binary patch literal 3441 zcmV-%4UY1OP)VW-Wil+4k@ zD6mc`=NI*9$-#b>#M6MCy7>VB45!|EQI*Dd5fmJL^8o}E;nX=7qZ~@4rOBf2227FIYv@d3K8;( zrHagX9K|3_+kRxAlmtalEUOwRfQGm-L>p;;SolJwHGwWdl&eZ{gkCK43!(Y@Jj=)o z2SL+$=(1E$5W)_7!4e^-4<)7Ry7+6%g59+ceC*ugVq*qF*Nh~HOly?z4#~IjaH67Y z(Mul(le^q`YrXfOo3H@9M`&zWeJ&7m;t&x~(FE$`g)JP3OLB~1grb55~>}ztt zWqF=BYm74FLivM0**khqI2?pvRs<(S=6xMUu5ttdiW0{0r7nJ$6&}winV)VRHJ-*% zUZ=WpTmq0j_N9nVO~8KP%8hSv=FWGS?tfP84)79;q3hZtWWMilaiZYNogX6y-gm~g ze;&U*vMjo+jT*of##z1LJzXxn$j2MLg&)s&*&`a1Hc>yA@DHN^s%^jdd!cRQWV z-d^Y8#csbpKy&yk%LO(!0G+*yJKNivo0}UY>h~di0WJ-^cjH)8pac9wXeE|U!kKT8 z2M>9i@u&5v8b@~bJ+MhOtbSKCKTuOonZ7Y~PdFTj zpSJm@uyGTn*?HioF+y4h99gb2jzXes)DUXtrKq_ty1cx+w6t8%Znw*A0y3|@(D!|D zaL5xrLUYI%iOWP{%irtnz5jQ;zZk($Y`*TbPj(-k_GRnt9-xOs zVerH~-S(51qW^@gtgiW<$3fhA^PQ_Jt2hC7+=fHw_PQL#(AE)berZ>7Ofh)k3gEh$ zj#a|@$r^+Qh{Zy{&w0XOYQ~K-Hp$qHbHQOCnD6A}@TSEvmq&ctJQtn=oPI9QQy_@& z;K?Go%niD63Y|NgCU0s{og0{ zE6Zuqr!Gf(=Ql7ku?C%|G06}7DRKwaxN8l*>60))=TESGMby^ryZ`yvfw8qV#M9+u z-p>n(VPen(;X`mOMEDdYdHDnArKn@2g(`d$E*q1do?GK0S_DfjoqbK!?+n=DOCZiU z?|qu4{Xt6hE&=cRTiZMRelJOEfvU#!i10oSWWhUn1SdwMd`ZaxW5mTiI=#_B9FJi( zx@u={$_=7|Cu*pvWi?ENmO@vd@mLVSwZg}vM#={_@P@}mhxa%Z8+)Ux-t;6KaX8M; zSQ~IGv=q8V8jpqd!L`E2YC`G4x7%XYTv%Mo5LT|X)*A1n43#%VWAy`1Lj}$04$+X$ z{s0i@4ej%s7ORq3Qn~9k`9Y!MlI1J zl>$`}Kq@Qup$5PI;>+mH40^r4`G&1_LhSRp$L$yVXG;VogluvW&@o7dz<-QK8w(`& z`1+SE5gIbw2z1gO0uCVYOYfJy#WnfZC?+5KqgNJdF0G}N_L9nokQ%Tk5z!IGcrO{* z%M%fZAR>ZYHrcVMr!e`t<#qhLjwu(UpC=ZrL|dASeIqGk2Oz2tm7*rGHc48=tF}36 zIHpRZ+KSyUb!l3><3v>DNO&nAH73=QB({~5PmF4e(Sq?70YFrwsA;uYOJtri1Zg_r zX3dBd0Qpu9K&+TEW_%7hK+gyN_D3)eHeUQ&8yIoR$A7b^K*XN25cr|@T@S#l8!^$O zLnggs6oF9;Oo8kZq7V=*DXLkE094mw^N8bYOa45PHJ=%_^S9)G?P9&UYkRET3wj#_I7 zxSEHxeX(K9dZaNl1iFddF&HUxSe2P=S&Z^a*rfP^ukzC{S0zlcC)?;Wo{=l<{m((ynsydN6FSli^n z`HBrT&v~8l>@v?T=a|De0u zn&A#K=Rg;e(JTpff5d*G>0IS@)3QhR`%USz_n9?UDnE}eHUgj4nN#zw#KWyf32_$U zyq|tkNAEy$zTRdTdEC~G)pq?cM*o0d_VjH~YqykcGX#i4l$oEfJX1o#FUh&RPl!Y+ z_8lU`0SZi>WxLZ^GE`es_}<-j4k5tGF?lA}>-8bhd=+oJ6(OiC2<0fms#i(|RIU4& zo_r!ya_gE@M`$$UA!VfOQ$a9qe(){QJQvD(5x|%A8sZndM`Hkk| z*iBe2?QJrn@*%|69(?IIj57jM3BV#*6rh;tlXu&AsFgRhv5>$bU7vi)YfvKWCiS4t z5nI6YZ4{F4WSk(N2+s3tJ~Lk~mnN>cWA~2OHsD)2jJZ&Ynwdg9l_8>t(n#ty5WI0p zfkMtR3T2g{=`zvJi1p{!cab?nEMtg4zpkCj%tiS^VawTKms+2!V=fpwBUgZc6+t8l zb$k>`M?oayr^NI|oKtvLg_WptI|_&x1t@}Eubmv`C=?2>U8dO+w3FGi$$9BR7MoP| z1dzBWd`98_J8vIxf~jsM&bfCh`Yacms1*c#^WUzOxjX9T4MuMsan|HV2m1d2?nAZg Ta>7s100000NkvXXu0mjfR=JZ$ literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-40.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-40.png new file mode 100644 index 0000000000000000000000000000000000000000..80c915be2f53d49349ecf1ec17d925d5ca028bff GIT binary patch literal 1875 zcmV-Z2dwysP)}$1JwORpCE|=MBt(8(3p*G%7- z7<_8UYw+=IXv_2NdmhkCwC8kf+0mM{#(H0R>vZ?gH*SJw#lG8jo|iC=lu>+2j3J3I z-L0LuN8fl7BeL|`!M2uBHVR|V6t0N_P_kAs$x_!YsYlxy+w_^QOk z7!j6^?yYHMm1!A_BS^a`duI}ik?Ax0>Rl+_R4~Jj^+a5XU8m%jJ^hm%1%c1KF(ufEo7hhM1y%~8oRG~A-iR@K z4T~eE@f=LOHE&YBKPV1#`M%`^?e;P%APAmM*~LbaR6xO^5GDb@gcrpu@>eFHi5sm|ZjUMeEqRo{M%w ziwX}D^?rcawJ7NA&udV>Xi1o4m~i%E@TlHlc0^x(`Q@EXM=OI%BB`V&Qr4a*$h;sG zToR>ByVdG+rfvS^o!zqiXuK7k`O_!!--Gm23eT6`@};Lg?&*->OA2ZlRf7>vcvg1s ziJ#8%K;h0+cfS3rZ!dmSe8S^L@Ay4DXLo7Vrr5%hT$qh#_P~?&tAK`s#6r_Wt`l@F zpS~Ous0VB)pg5b$bVY->JmJ}R=IE%6ZUGjyMP#8Z7I}3?Ph=c0R)xE{%`<^z|o)0R_){1Ri`7=u+pu38NlZ*>Ts)LyS=}vP9utuh;Jn#6=j< ztWvi?T2sf6RwPZKHO;vJ?%0lkC*B`~E=l$%u@p}S4igX;bIUTu=x(>$>&=C67^heg z-cKEfQVK4{1nA1YD2gwUDvYD~`T4oIIST@H;54pi;r`d<1t2o)$(|F?_s8Y%rm}u+ zToufPARN#nbWxyynE^v4raE{=5v{f5xhqK$rR{u#O$R}w2mtaKEaHaC@s?-dGrtDm zfaW4Dk;>R6_sV9oVOgImzHD!;Ke+0x&pHL*ODik8XH_0XIJ)j>xUWwENx^}J(a7O| zCZUT0a%zBYZLb!wqiX0-EwM0qiMlg1$|x5( zUDfPA;*iD3g@XshC71wR-F^F8H{To!?n-PC3x{hPu37>K(^@yFG%BMlll3d*vNo#N zxfESxrP5)a48rLAh1o4X7=0dS*YS)8f^a~SNH#-3rStA2498<->~Nz@xl}4yYXJz(^LevgrtA8R8mUuQFGqLMO+BX0dGn_$$mIE6^PVEYJV| N002ovPDHLkV1jA3pp^gs literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9b724afe8124ef95f53a13343f4c65bf08d1e5 GIT binary patch literal 2877 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 literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eee38a33d6f137e2769b6e98fe2e7132150feb88 GIT binary patch literal 4085 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 literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..30c9283b22fe36948fc01d0b0d30142e853b63c9 GIT binary patch literal 6193 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 P00000NkvXXu0mjf%+$30 literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-76.png b/ios/assets/Assets.xcassets/AppIcon.appiconset/Icon-76.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9b921b436b0ef30f3d746ce3643f691caf2037 GIT binary patch literal 3116 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 d<`GW3<{ikh`aJh*CWv1g~! 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 A1^@s6 literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/Banner.imageset/Banner@3x.png b/ios/assets/Assets.xcassets/Banner.imageset/Banner@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb0efc6f9bc1e669ae1347bc3680074eaa50d11 GIT binary patch literal 17594 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 literal 0 HcmV?d00001 diff --git a/ios/assets/Assets.xcassets/Banner.imageset/Contents.json b/ios/assets/Assets.xcassets/Banner.imageset/Contents.json new file mode 100644 index 000000000..c4af414d2 --- /dev/null +++ b/ios/assets/Assets.xcassets/Banner.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Banner.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Banner@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Banner@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/assets/LaunchScreen.storyboard b/ios/assets/LaunchScreen.storyboard new file mode 100644 index 000000000..650bf4296 --- /dev/null +++ b/ios/assets/LaunchScreen.storyboard @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/build.gradle b/ios/build.gradle new file mode 100644 index 000000000..fbee1ddb1 --- /dev/null +++ b/ios/build.gradle @@ -0,0 +1,43 @@ +apply plugin: "java" +apply plugin: "robovm" + +[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' +sourceCompatibility = targetCompatibility = appJavaCompatibility + +task updateRoboVMProps(){ + def props = new Properties() + + props.setProperty ('appName', appName) + //append .apple because com.shatteredpixel.shatteredpixeldungeon was taken =( + props.setProperty ('appPackageName', appPackageName + ".apple") + + props.setProperty ('appVersionCode', appVersionCode.toString()) + props.setProperty ('appVersionName', appVersionName) + //parse out just #.#.# from version name, this is an apple requirement + props.setProperty ('appShortVersionName', (appVersionName =~ /\d+\.\d+\.\d+/)[0]) + + props.setProperty ('appMainclass', "com.shatteredpixel.shatteredpixeldungeon.ios.IOSLauncher") + props.setProperty ('appExecutable', "IOSLauncher") + + file("robovm.properties").withWriter { props.store(it, "Dynamically generated, do not commit to version control!") } +} + +build.dependsOn updateRoboVMProps + +launchIPhoneSimulator.dependsOn build +launchIPadSimulator.dependsOn build +launchIOSDevice.dependsOn build +createIPA.dependsOn build + +dependencies { + implementation project(':core') + implementation project(':services:updates:debugUpdates') + implementation project(':services:news:shatteredNews') + + implementation "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" + implementation "com.mobidevelop.robovm:robovm-rt:$robovmVersion" + implementation "com.mobidevelop.robovm:robovm-cocoatouch:$robovmVersion" + implementation "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion" + implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios" + implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios" +} \ No newline at end of file diff --git a/ios/robovm.xml b/ios/robovm.xml new file mode 100644 index 000000000..95046370e --- /dev/null +++ b/ios/robovm.xml @@ -0,0 +1,52 @@ + + ${appExecutable} + ${appMainclass} + ios + thumbv7 + ios + Info.plist + + + ../core/src/main/assets + + ** + + true + + + ../desktop/src/main/assets + + ** + + true + + + assets + + + + com.badlogic.gdx.scenes.scene2d.ui.* + com.badlogic.gdx.graphics.g3d.particles.** + com.android.okhttp.HttpHandler + com.android.okhttp.HttpsHandler + com.android.org.conscrypt.** + com.android.org.bouncycastle.jce.provider.BouncyCastleProvider + com.android.org.bouncycastle.jcajce.provider.keystore.BC$Mappings + com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi + com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$Std + com.android.org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi + com.android.org.bouncycastle.crypto.digests.AndroidDigestFactoryOpenSSL + org.apache.harmony.security.provider.cert.DRLCertFactory + org.apache.harmony.security.provider.crypto.CryptoProvider + + + UIKit + OpenGLES + QuartzCore + CoreGraphics + OpenAL + AudioToolbox + AVFoundation + GameController + + \ No newline at end of file diff --git a/ios/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ios/IOSLauncher.java b/ios/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ios/IOSLauncher.java new file mode 100644 index 000000000..265fb2398 --- /dev/null +++ b/ios/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ios/IOSLauncher.java @@ -0,0 +1,103 @@ +package com.shatteredpixel.shatteredpixeldungeon.ios; + +import com.badlogic.gdx.Files; +import com.badlogic.gdx.backends.iosrobovm.IOSApplication; +import com.badlogic.gdx.backends.iosrobovm.IOSApplicationConfiguration; +import com.badlogic.gdx.graphics.glutils.HdpiMode; +import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; +import com.shatteredpixel.shatteredpixeldungeon.services.news.News; +import com.shatteredpixel.shatteredpixeldungeon.services.news.NewsImpl; +import com.shatteredpixel.shatteredpixeldungeon.services.updates.UpdateImpl; +import com.shatteredpixel.shatteredpixeldungeon.services.updates.Updates; +import com.watabou.noosa.Game; +import com.watabou.utils.FileUtils; + +import org.robovm.apple.coregraphics.CGRect; +import org.robovm.apple.foundation.NSAutoreleasePool; +import org.robovm.apple.foundation.NSBundle; +import org.robovm.apple.foundation.NSDictionary; +import org.robovm.apple.foundation.NSException; +import org.robovm.apple.glkit.GLKViewDrawableColorFormat; +import org.robovm.apple.glkit.GLKViewDrawableDepthFormat; +import org.robovm.apple.uikit.UIApplication; + +public class IOSLauncher extends IOSApplication.Delegate { + @Override + protected IOSApplication createApplication() { + + //ensures the app actually crashes if there's an error in the mobiVM runtime + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + public void uncaughtException(Thread thread, Throwable ex) { + new NSException(ex.getClass().getName(), ex.getMessage(), new NSDictionary()).raise(); + } + }); + + try { + Game.version = NSBundle.getMainBundle().getInfoDictionaryObject("CFBundleVersionString").toString(); + } catch (Exception e) { + Game.version = "???"; + } + try { + Game.versionCode = Integer.parseInt(NSBundle.getMainBundle().getInfoDictionaryObject("CFBundleVersion").toString()); + } catch (Exception e) { + Game.versionCode = 0; + } + + if (UpdateImpl.supportsUpdates()) { + Updates.service = UpdateImpl.getUpdateService(); + } + if (NewsImpl.supportsNews()) { + News.service = NewsImpl.getNewsService(); + } + + FileUtils.setDefaultFileProperties(Files.FileType.Local, ""); + + IOSApplicationConfiguration config = new IOSApplicationConfiguration(); + + config.colorFormat = GLKViewDrawableColorFormat.RGBA8888; + config.depthFormat = GLKViewDrawableDepthFormat.None; + config.hdpiMode = HdpiMode.Pixels; + + CGRect statusBarFrame = UIApplication.getSharedApplication().getStatusBarFrame(); + double statusBarHeight = Math.min(statusBarFrame.getWidth(), statusBarFrame.getHeight()); + + //if the application has a short status bar (no notch), then hide it + //TODO we do this check elsewhere now, can this be removed? + if (statusBarHeight <= 24) { + UIApplication.getSharedApplication().setStatusBarHidden(true); + } + + config.useAccelerometer = false; + config.useCompass = false; + + //devices not currently listed in LibGDX's IOSDevice class + config.addIosDevice("IPHONE_12_MINI", "iPhone13,1", 476); + config.addIosDevice("IPHONE_12", "iPhone13,2", 460); + config.addIosDevice("IPHONE_12_PRO", "iPhone13,3", 460); + config.addIosDevice("IPHONE_12_PRO_MAX", "iPhone13,4", 458); + + config.addIosDevice("IPAD_7G_WIFI", "iPad7,11", 264); + config.addIosDevice("IPAD_7G_WIFI_CELLULAR", "iPad7,12", 264); + + config.addIosDevice("IPAD_8G_WIFI", "iPad11,6", 264); + config.addIosDevice("IPAD_8G_WIFI_CELLULAR", "iPad11,7", 264); + config.addIosDevice("IPAD_AIR_4G_WIFI", "iPad13,1", 264); + config.addIosDevice("IPAD_AIR_4G_WIFI_CELLULAR", "iPad13,2", 264); + config.addIosDevice("IPAD_PRO_11_3G", "iPad13,4", 264); + config.addIosDevice("IPAD_PRO_11_3G", "iPad13,5", 264); + config.addIosDevice("IPAD_PRO_11_3G", "iPad13,6", 264); + config.addIosDevice("IPAD_PRO_11_3G", "iPad13,7", 264); + config.addIosDevice("IPAD_PRO_12.8_5G", "iPad13,8", 264); + config.addIosDevice("IPAD_PRO_12.8_5G", "iPad13,9", 264); + config.addIosDevice("IPAD_PRO_12.8_5G", "iPad13,10", 264); + config.addIosDevice("IPAD_PRO_12.8_5G", "iPad13,11", 264); + + return new IOSApplication(new ShatteredPixelDungeon(new IOSPlatformSupport()), config); + } + + public static void main(String[] argv) { + NSAutoreleasePool pool = new NSAutoreleasePool(); + UIApplication.main(argv, null, IOSLauncher.class); + pool.close(); + } +} diff --git a/ios/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ios/IOSPlatformSupport.java b/ios/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ios/IOSPlatformSupport.java new file mode 100644 index 000000000..f01e53976 --- /dev/null +++ b/ios/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ios/IOSPlatformSupport.java @@ -0,0 +1,235 @@ +package com.shatteredpixel.shatteredpixeldungeon.ios; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.backends.iosrobovm.IOSGraphics; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.PixmapPacker; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; +import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; +import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; +import com.watabou.noosa.Game; +import com.watabou.utils.PlatformSupport; + +import org.robovm.apple.audiotoolbox.AudioServices; +import org.robovm.apple.systemconfiguration.SCNetworkReachability; +import org.robovm.apple.systemconfiguration.SCNetworkReachabilityFlags; +import org.robovm.apple.uikit.UIApplication; + +import java.util.HashMap; +import java.util.regex.Pattern; + +public class IOSPlatformSupport extends PlatformSupport { + @Override + public void updateDisplaySize() { + //non-zero safe insets on left/top/right means device has a notch, show status bar + if (Gdx.graphics.getSafeInsetTop() != 0 + || Gdx.graphics.getSafeInsetLeft() != 0 + || Gdx.graphics.getSafeInsetRight() != 0){ + UIApplication.getSharedApplication().setStatusBarHidden(false); + } else { + UIApplication.getSharedApplication().setStatusBarHidden(true); + } + + if (!SPDSettings.fullscreen()) { + Game.bottomInset = Gdx.graphics.getSafeInsetBottom(); + Game.height -= Game.bottomInset; + Game.dispHeight = Game.height; + } else { + Game.height += Game.bottomInset; + Game.dispHeight = Game.height; + Game.bottomInset = 0; + } + Gdx.gl.glViewport(0, Game.bottomInset, Game.width, Game.height); + } + + @Override + public void updateSystemUI() { + updateDisplaySize(); + ShatteredPixelDungeon.seamlessResetScene(); + } + + @Override + public boolean connectedToUnmeteredNetwork() { + SCNetworkReachability test = new SCNetworkReachability("www.apple.com"); + return !test.getFlags().contains(SCNetworkReachabilityFlags.IsWWAN); + } + + @Override + public void promptTextInput(String title, String hintText, int maxLen, boolean multiLine, String posTxt, String negTxt, TextCallback callback) { + //TODO need multiplat text input, this does nothing atm! + } + + public void vibrate( int millis ){ + //gives a short vibrate on iPhone 6+, no vibration otherwise + AudioServices.playSystemSound(1520); + } + + private int pageSize; + private PixmapPacker packer; + private boolean systemfont; + + //custom pixel font, for use with Latin and Cyrillic languages + private static FreeTypeFontGenerator basicFontGenerator; + private static HashMap basicFonts = new HashMap<>(); + + //droid sans fallback, for asian fonts + private static FreeTypeFontGenerator asianFontGenerator; + private static HashMap asianFonts = new HashMap<>(); + + private static HashMap> fonts; + + @Override + public void setupFontGenerators(int pageSize, boolean systemfont) { + //don't bother doing anything if nothing has changed + if (fonts != null && this.pageSize == pageSize && this.systemfont == systemfont){ + return; + } + this.pageSize = pageSize; + this.systemfont = systemfont; + + if (fonts != null){ + for (FreeTypeFontGenerator generator : fonts.keySet()){ + for (BitmapFont f : fonts.get(generator).values()){ + f.dispose(); + } + fonts.get(generator).clear(); + generator.dispose(); + } + fonts.clear(); + if (packer != null){ + for (PixmapPacker.Page p : packer.getPages()){ + p.getTexture().dispose(); + } + packer.dispose(); + } + } + fonts = new HashMap<>(); + + if (systemfont) { + basicFontGenerator = asianFontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/droid_sans.ttf")); + } else { + basicFontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/pixel_font.ttf")); + asianFontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/droid_sans.ttf")); + } + + fonts.put(basicFontGenerator, basicFonts); + fonts.put(asianFontGenerator, asianFonts); + + packer = new PixmapPacker(pageSize, pageSize, Pixmap.Format.RGBA8888, 1, false); + } + + @Override + public void resetGenerators() { + if (fonts != null) { + for (FreeTypeFontGenerator generator : fonts.keySet()) { + for (BitmapFont f : fonts.get(generator).values()) { + f.dispose(); + } + fonts.get(generator).clear(); + generator.dispose(); + } + fonts.clear(); + if (packer != null) { + for (PixmapPacker.Page p : packer.getPages()) { + p.getTexture().dispose(); + } + packer.dispose(); + } + fonts = null; + } + setupFontGenerators(pageSize, systemfont); + } + + @Override + public void reloadGenerators() { + if (packer != null) { + for (PixmapPacker.Page p : packer.getPages()) { + p.getTexture().dispose(); + p.updateTexture(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest, false); + } + } + } + + private static Pattern asianMatcher = Pattern.compile("\\p{InHangul_Syllables}|" + + "\\p{InCJK_Unified_Ideographs}|\\p{InCJK_Symbols_and_Punctuation}|\\p{InHalfwidth_and_Fullwidth_Forms}|" + + "\\p{InHiragana}|\\p{InKatakana}"); + + private static FreeTypeFontGenerator getGeneratorForString( String input ){ + if (asianMatcher.matcher(input).find()){ + return asianFontGenerator; + } else { + return basicFontGenerator; + } + } + + + @Override + public BitmapFont getFont(int size, String text) { + FreeTypeFontGenerator generator = getGeneratorForString(text); + + if (generator == null){ + return null; + } + + if (!fonts.get(generator).containsKey(size)) { + FreeTypeFontGenerator.FreeTypeFontParameter parameters = new FreeTypeFontGenerator.FreeTypeFontParameter(); + parameters.size = size; + parameters.flip = true; + parameters.borderWidth = parameters.size / 10f; + if (size >= 20){ + parameters.renderCount = 2; + } else { + parameters.renderCount = 3; + } + parameters.hinting = FreeTypeFontGenerator.Hinting.None; + parameters.spaceX = -(int) parameters.borderWidth; + parameters.incremental = true; + if (generator == basicFontGenerator){ + //if we're using latin/cyrillic, we can safely pre-generate some common letters + //(we define common as >4% frequency in english) + parameters.characters = "�etaoinshrdl"; + } else { + parameters.characters = "�"; + } + parameters.packer = packer; + + try { + BitmapFont font = generator.generateFont(parameters); + font.getData().missingGlyph = font.getData().getGlyph('�'); + fonts.get(generator).put(size, font); + } catch ( Exception e ){ + Game.reportException(e); + return null; + } + } + + return fonts.get(generator).get(size); + } + + //splits on newlines, underscores, and chinese/japaneses characters + private Pattern regularsplitter = Pattern.compile( + "(?<=\n)|(?=\n)|(?<=_)|(?=_)|" + + "(?<=\\p{InHiragana})|(?=\\p{InHiragana})|" + + "(?<=\\p{InKatakana})|(?=\\p{InKatakana})|" + + "(?<=\\p{InCJK_Unified_Ideographs})|(?=\\p{InCJK_Unified_Ideographs})|" + + "(?<=\\p{InCJK_Symbols_and_Punctuation})|(?=\\p{InCJK_Symbols_and_Punctuation})"); + + //additionally splits on words, so that each word can be arranged individually + private Pattern regularsplitterMultiline = Pattern.compile( + "(?<= )|(?= )|(?<=\n)|(?=\n)|(?<=_)|(?=_)|" + + "(?<=\\p{InHiragana})|(?=\\p{InHiragana})|" + + "(?<=\\p{InKatakana})|(?=\\p{InKatakana})|" + + "(?<=\\p{InCJK_Unified_Ideographs})|(?=\\p{InCJK_Unified_Ideographs})|" + + "(?<=\\p{InCJK_Symbols_and_Punctuation})|(?=\\p{InCJK_Symbols_and_Punctuation})"); + + @Override + public String[] splitforTextBlock(String text, boolean multiline) { + if (multiline) { + return regularsplitterMultiline.split(text); + } else { + return regularsplitter.split(text); + } + } +} diff --git a/settings.gradle b/settings.gradle index 06010c0cf..08d40a204 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,3 @@ -include ':core', ':SPD-classes', ':android', ':desktop', ':services', +include ':core', ':SPD-classes', ':android', ':ios', ':desktop', ':services', ':services:updates:debugUpdates', ':services:updates:githubUpdates', ':services:news:debugNews', ':services:news:shatteredNews' \ No newline at end of file