From af0f00dafc98c4cbcb3fab1aa6bc10686a5b523f Mon Sep 17 00:00:00 2001 From: Micah Gomez Date: Sun, 9 Feb 2020 19:34:58 -0800 Subject: [PATCH] added NSTask for sbreload and to kill cfprefsd (both pulled from old FBRestore script) --- .../xcschemes/xcschememanagement.plist | 2 +- .../UserInterfaceState.xcuserstate | Bin 20249 -> 21914 bytes FlashBack/ViewController.m | 623 +++++++++--------- .../xcschemes/xcschememanagement.plist | 2 +- 4 files changed, 320 insertions(+), 307 deletions(-) diff --git a/FlashBack.xcodeproj/xcuserdata/micahgomez.xcuserdatad/xcschemes/xcschememanagement.plist b/FlashBack.xcodeproj/xcuserdata/micahgomez.xcuserdatad/xcschemes/xcschememanagement.plist index fb10bdc..0957787 100755 --- a/FlashBack.xcodeproj/xcuserdata/micahgomez.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/FlashBack.xcodeproj/xcuserdata/micahgomez.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ FlashBack.xcscheme_^#shared#^_ orderHint - 1 + 0 diff --git a/FlashBack.xcworkspace/xcuserdata/micahgomez.xcuserdatad/UserInterfaceState.xcuserstate b/FlashBack.xcworkspace/xcuserdata/micahgomez.xcuserdatad/UserInterfaceState.xcuserstate index 8b29ab54f7ae1a23d08676127ef34506ec7c44d0..39b279a9efa3b3a28d36433d6f95be0906826dd1 100644 GIT binary patch delta 10518 zcmaKR30%|l|Nr|MY%s<)w!y|Wrm!)_Ha0x)R>W(lh#=mI116vx%HfgO-k-G0G_QH* z1$bepnOB;rX_n^K%%d#J^2pLMD^s&W{l7mOLp%OI_V}=U-tYJ8eZ1bU*YkC)SOZtS z1{b*D%!LI`??^BTj0X8&45$Ltpa#@}NnkRV0;Ymzz%;;t=fO*0Ht>PPUBrqJxpd3cQ zXc!B%PzPH;BQ(JzXz@Zjbi!2F3buxA;6RuIbKxME2M5C;a3~xGhrC7egZ#*7vN{` zb9fPc0l$Qo;8*Z#co}{Rzk|1+_dfg$K0pXzM34Z5pfDssaukEqs0A`26SAOWl!6?n zHEM_2BNxg<15hp+g+`-%GzPg*0UC?Op=S_9FQS*xJhTY;&@%KYszdA12J|*MfZjm| z(IIpgy^D^Zqv$(PeZ4-9+D`AJ9+eSM(SI3^BqOM`9_K zVL6V%Dy+pi9FNU76}Q5zaTnYbcf&n!A3Pf8<1yHc3veMW!X7*p7voAi0Z+u!uoqK2 z6Tg68#jEgYyaunu>u?>e#|?Nr-i){7H?VgH-iP<&xA6h|9zKS@z+d7^_$&N1zKpNn ztN0rJ2H(Ix;h*s@_zwO9|B3%1ga}A1(GnfelQ?1^El5iePZEfkq>wbyj&vjGq&MkH z`jNq82pLL-k>O-Cag$$UEd9IZjTH56OA*3Hg+KPHvL#$q(cf`H}oW?vi`tKKVlc z1Vj)jkO<_0C_%K(%J_7jrufS7v*AX1mxfRkHB$S|yI24t+q9W(HB581b~vntcB!d8 zp`cep1)WH1=p;7m1#0(=5bRAH3@qzG4#)+AKpu^uYO0~J>%kB(6bu8ysg|bEk#rOr z>j{aE%a>}07FHH{?5-X?`IPAQHGi zDX?q;1)vZV0S_1pia`n0Q9X^L2HJwQr16`;IA8>2>@k8$Fo7np?VH$Rqz>AK+DEg6 z2A5Ws7L<8%JcTtrndozGYTESa!r%(eg6Dv$4os(sb-+u_G$mge$}oKaa(Q&m}3=Bcum2WQy_-fmv^0B!qZ-9z9ou&i76 zWZI+PLtxnm-UG+L```m`9Gsx-XnWd$cBGwX=Z)Ml!7cZkGQnL@ z=l-88G z%gUw(C(6jq^V1je94aX-E2{ETG|}jTi{^UDm?(LQ0<2-$(X@Iz8<0`!tzslK{oJ(` zg(bOxsv^PbTNRMmOt%!Duu%144QS{K{mwe{GGM zt&r=fX#jV?U9c)IE0?_lX1Na@)PdhHJ^dVHkJ>9zy^jM85vg950}m zbO?3P!R*w{`0=-`+j~y&6xQ;p(z9YxX;o!KIXgg)%5ryUg?}9=fMM%l2n>ZnD58Do z0GdN{Y2G;~h7lkVN?;_E4tEtXqSCRYo~k?-yOAlhAMH=GhB#$y4g5q>ssB_^0hPXy zvN%CKRDo6OR|{`ok{ECbN@+He+pM93O8C1oIHjOz35E!Kua)l&uG-SyG>C6vBHpQp zhd@JhfZv9(l~smjo^}bWoCwWBvU1a_s@zlSVIo)+<$cWmg+G2A=ud`L-z>Qe+t|ML z%5518R$vNrjBdUIKWPJNW5grV#*R&ERoL3us&#=QU#gfkjlsNwNBq<@r`3?g!=w~3 z*k&$BTbKbXufsIh4z`CKU`N;qc7|PGSJ(}vg9195=F>6MO$%rtEutPemKIZn)33uG zuqS(Z03-hZGwjFzf&*wN9nYRprsn*kqGkSH<-A_VcnM@6s97iWG8`M2K$qXy} zBZGq`!Wv+yhgGneR?+Hu-jJ}(FdOLeg?E=tgVXsbo~5;Qz|1yk_k9~~l06S+@~t!I z7uRh7<`|}^>KKD$34g}9exB)!;cwTeRLI* z_0@C@TS-ONvEOy{4f-|DYCDPk;?U4hqlE?=dK>)zQlK%dE;+9`5iv|7wscpMu4tlw66wT zg24WK4UwjZb0`!E8Eh0mEfV=Yi!={e>laBBj>IFfa{b_u?XD@QM-gDv(+y46h$4|R zU>u(UJrso$5Fi!!m~N#F4Dagc2;XLDnipwc*aj4fv`B~aD2}eD8|h}cg}&B|U#KPQ z$G~L+(<6o?kv85uR#tg<&!l!jhbFi|iGH}*#KX<#znk+QM(sp4Hce~VNVBA&!A9>~ z|KwJF^59f${8PQoPxZtJx`;ZUj;IsrjJkkG)D?9@>8Lx(U_9!=s%zX;0c&1XTV9b>TVCL)%9qML6-9m%?|r&eR#@V$ax=?SmE*1` z_Vn{qFs)%$+Z}*@=36ov))XM_S6bl-%r~s2w45=;T|R-$99-~8Hxs{qOk7z=w@Ed0 zyEHePf+#=CvVXo0<3@S|SKSw}y+`*LJZO+-3bQnU1NCd#NdxMSvcRhU|A2gH6eIm7 znIFkeHZzH6Al=a{-DnUR$|Mx!p}}YfO@5Q^q`Ml>Ff<&Epu6cFx|gPm;O%$c(uyKx zo`(nYpZ9WniBaZQDGtnA$j@6u-=ag$qGEPKC8*R_5~WSpN5A?EjYnmu996L9N;CmY z1UpeRszJ4A5^9O2psBviQQN((>3j4T-A^wuNjpNnd|Gy=p=bTFdx{>WZ~J9;U|>-W zhBct)(F`<`9-!~ggUvF_R%jNsps4+aq|NtB+96)jOix7Z9O}S!+6`r(CEyX=M&G3@ z%x2aOEk`SS{pHb#XeH16|KjmEw2G0gW|FuTWh_!gdymp>0or=hz&sNsll7>cr&dp> zEhsB3v{(Aw?$SvfTcNGGvbL%)7!jb2=nbH1M4QlN)QGmA*U;-|E82#()A#8I^f*01 zKcpw=|L7_DQ6t*HTNYqMyU`xBmwoS}r~P(@gd~j@0{xU; zV3;mwX|SO$Vc0sFCre9`2ICcU1%1O)Tt(ODMf%0l6xl76zT0|7&j4#~p&yx|HbZEi zQXXHX@-kPCZu7kQ&%OZd&*&H58C8s+9^GMX$r+U)=`Q-6#f<14x{rQC59nojgy%SkToNRf`fv3tP6v^=JI-JppS{Rk;~pR*>YXQJI>16e2@RD-QUR4ofehQX zOXZ2?Bulc@W>4$frEAZ={rYF;<|S0rmX+m8W7`|rw=(cSydkY!YlDM*oUL0s4DHg= z41@EtayztY{U70-Z=$9ZYTee?6>DU5t*EfB4HZ-AxpwWH9XfXM^^J83L^OIGNTYA<2HrEgaXO)wi=E~}Ewp;qZoWF&{^#gnOsMpLrE;QHOpnGgw3~#yEEly9tz>zqcUXey3c7}_ zqem=_6pJm`#*#=~arc0FAsF~(368)0;eqrXFXG!+W5ohAQxF7D1v+w|%jR)c!`Wt;ff2V)YKj~leA$>$2H!{h}!-Me37m)8K%a2=1*4PhzPHT#akc6b=#&hR`Docru=Xr*crpK`jRz zESP_Sp7=Qm=ur*|@}&cOr{Y{XK1O1Rfu}~y2#g5Lmlp6Nd~4z~V*^-)U&IS|R?NaL z;o10QJO|Ikui$xjJ_kk2WN zyoq=F(G>5Z=Q$Y7z!C4IpK>sUri>0cFwFlbt|^fT8l>hR**o~KA5!rl>b=Op*#Cnr zNb)}ZnCHa@_&7d+Kg1{T|L`gN5kAd99S8LsjN_nzgDp7Nl7sOaOyHog5ua(|#V7bv zmNqfs&p8;#doc!BIGD^}E`z4m>A^6O`aFu;~)5kgJupU1^zQ`w3VjB zANo1Kkl-$V#rFgJxX1IuT93u}0lmpV+rRlC=@=w>NI-xa>5nPnM#}#|)kH!<2=k2_ zNhlE#5eXyVL`))xghcv;NjkGEaB8%hsCX+%)Ew*(kN|p?gPnLY%E2zdGZP~_Gcj?n zW7C;Q5UV860|3s{Kq35`O|g%2SI1QlN*qcAVqi5 z16b-v1_#sYNKX!C{7t7wWeks9XmknyC9l#>clNhXkqq>5B?FpGl&ILLO! zbSj5~xf~qC!8{HQZX~rV6f}}4WGZ=vOe4<%CTl~O;WKh@C?OE@^5gB2XCYPR2GJz;s!2C{){B%3(M&Q-)gPXlQrTfkfnj^$u6OU|%3)a2Wd ztoKbxuJQ)2Y$w_KAC!0r*~f2&;ZCW4GXo8I-D_F4El75V9Q_Y6@*X+HFIdLGa(==1 zZUJ)-ayl4-lqbn)M%m?Gd;OT4Axz3EIXHoX6B%vSCKW9N1|tH7vzWOI8?!X9pnxfo?lQ_T{C5xua(UP<9u#gE2!};v1KY& zN~w^BQuPRXZm+CdTlX>+L;CL6;ycDr(K)3`;%MEj!I|2MH~v)I(57t~^_z1V&9bCf zxfz3cv6O6{E3evJ>`AYwsVXg~t?~Fe+B@2$fj<9){_e9XNtbSQU8$6+_=&ss)YWJ7 zpfW12@73G)kv)TC4agqo&xj|bNF3QY&A!ChtO0}a{+ZJnG&m=i8e{!Khw*82;n3_H z_A+9m?~N1%9yL10_d!acI%~ifH?zz9M(fAqd{S8C87nC+DIGW77wSki#!~(H@`_5y zgo%Bt2C-1S2MY;Y8N3t5$5Ule5vyqEc9uKJWo@$t)J|gl2uoH~vZRH(&{IE|_fMX@ zv$dx_!zleN^;7x1JUiVd?XE)4<*+ZMuXFck?OE9x1%ENJh9y0Azp3k^Xdw53ab<_@&A%s zBAdw9zXlvMPd#C=33G!7RTjCY8r(I8v<}YphV1@Q zmTF{mDDoShrIu0j1Wx`W4;ha0ZFS@k2d6g$4+7Xcvb&#DAn?O#;J1*sK2vbDAY34( zNBmwE<>2!yCVt{H31k5iz&&LGqMzlE_FDD^n&A6Dw0%h?Urh zgQT)T<@4kcWyF*S8u3EJyohBH zMw`yxMzyb$?W z2c|Y(i_ry(g)H%qz|Q!Wl*M+>19S)qAW?4EVIcv$kJsQvYxWu zvMgD)EJrp-Hdt09n<$$pTP9m4+bY{7+ar5RwqN$H?5OOR>;u^e*#+5U*^jcjviq_J zvOnZdj^zS*s9Yr1%8l|=d4Kr;`9OKDJWuW&A|ECnAs;2rm%HVKa*w=N{=9sq{6+ao z@|Wdv<@4kVJPDFjJ2vbBW zGzzUEPSHXUuSipLQ}k5yR=5;>6+;#I3b&$A;Zc++DijkGRf-zLbBbAt#fn!ItG$Y~ ziaNz+#TLcuifxKF6h{;%6_&a1vt{SqA#t%=q~>!S_PEu#~nZPBx%7e&7w zy)*h$^tI?)(LY8168&oohzX4m#e~O1#3*7^F)=Zk7;TI>rd5n9W<<=Wn6WXXG2>&( zVT&8ab%lC@x=LN+RnJz>QNN;|uU@G3 zsaL5R)Em^B)Q#%b)NiTxs}HCTs!ysFQ~gl=SOYa-8iU5D z>8RW7HQUM-qh^U?9sfX*{?aEIjA|TIih(_b3yaD<_paw z&DWYMnroWtn(s8;o0=bDg|UgTePhdGeX+Y^KaYK&jn*2p@mixcQR~pQ*LKu))^^pV zYcsSxwOQH`+A-P!ZIQNAJ6>C^t<+A_zO40W7i*VlS7=|=Zq{zqZrAS6?$N%b-LE~M zJ)%9MgSs$X3!O>VS=UQ9T34u>rh7@ZQ0LPv(Jj-h@apPy>vbD-n{``suj_W}4(UGB zUDf@hd!YM6_m}RG9_U5-aD9Y6QZLg->7Dv4{Y3rCdY^u=eyP4ezfr$g|C)ZQe!Kpt z{$u?){U`d*^cVGC>aXj+*Wc3L*8i-37)Rnl;)HQwak99mIAvUPoI0*$Tyk8yxUO;O zaT#&mo^k!+vf{Gia^eQXjgBjhn-Di8eo6eY_;vBy;&;a%h(8hkW&Bt1m*cO-e-r<0 z{EhhU<8Q^^PJjtGAtXVRAWn!(kS8b;ViIB#bP25!1}2P7s7=_Mus`8K!c8MF%8V+b z+Nd?QFeVrijY-B~#u>&1#%0Ep#?{8P#*M~Cukm%`cH<7?LE~ZL5#upav?;-4GMP=u zrUjnv+0iMp6RzlMPjSO zA&FBH*CxK3c->6Q@n)+z#hhwxZSHLDWpho&5O*7&2{FD=FR5U%x{?AH19U=HNS5@Xa3fF(|pVPllhMMp80|KPxGTBn50OG zPEseuCh3w4N%2X>q{Jjkk~PVdRFX6|Xqcz zVOFa(+gfRzXI*ApXmwUrwP&F%%qF%;Y&x68X0thLt!!;=?QA`5y=^XAKif9j+qNUNW47bAleV+A^R^4N zi?%Oq5A6nfx_zkKZ7;GH+e__L_G){r{dxNf_LuB)?DOmk>}%|s?Yr&A?I-OY+0WR| z+b`HJ+ArBJ+ppR0+kf}k|Fl0$0Vy~oBt?`WPLZTYQ#2{YlrAX)Q%X{%rz}d@l5#ZV z51ZJnBy+9fqTwMT02R99+F>af&; zKF9ie(C2)gD}BD{^If0s`~2AF=RUu>fD5|>E}<*j72%3>$y{w+BU~@Iw!7YP9d?~? z{m=D@>r2-a*WDu5eb?hmlu0r}GNUq8nK7BMnfgpaW>Tg#)1K+bY@gX7vr}fz%&g4p u%-qbunZq(iWR_%(%Ph;R%si9%Rp#Z)tC`oE9CQ@;7Q{3;=1pIHGyfm{>W#Mm delta 9833 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 nJ5M-II=^&&selectedBackupPickerView reloadAllComponents]; - - [finishedCreateAlert dismissViewControllerAnimated:YES completion:nil]; - - }]; - [finishedCreateAlert addAction:ok]; - - [self presentViewController:finishedCreateAlert animated:YES completion:nil]; - - /*pid_t pid; - int status; - const char* args[] = {"killall", "backboardd", NULL, NULL}; - posix_spawn(&pid, "/bin/bash", NULL, NULL, (char* const*)args, NULL); - waitpid(pid, &status, WEXITED);*/ - - } - }]; - [createBackupAlert addAction:confirmAction]; - [createBackupAlert addAction:[UIAlertAction cancelAction]]; - [self presentViewController:createBackupAlert animated:YES completion:nil]; + + UIAlertController *createBackupAlert = [UIAlertController alertControllerWithTitle:@"Enter the Backup Name" message:@"Please do not use special symbols. Use only letters and numbers, no spaces." preferredStyle:UIAlertControllerStyleAlert]; + [createBackupAlert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { + textField.placeholder = @"Backup Name"; + textField.secureTextEntry = NO; + }]; + UIAlertAction *confirmAction = [UIAlertAction okActionWithHandler:^(UIAlertAction * _Nonnull action) { + NSLog(@"Backup name is :%@", [[createBackupAlert textFields][0] text]); + NSString *newBackupName=[[createBackupAlert textFields][0] text]; + + if([[[createBackupAlert textFields][0] text] isEqual:@""]){ + NSLog(@"Empty backup name!"); + } + else{ + NSLog(@"Backup name is good!"); + + NSLog(@"Running NSTask"); + + NSTask *createTask = [[NSTask alloc] init]; + [createTask setLaunchPath:@"/bin/bash"]; + [createTask setArguments:@[ @"FBCreate", newBackupName, stringTweaksEnabled, stringIconsEnabled, stringWallpaperEnabled]]; + [createTask launch]; + [createTask waitUntilExit]; + + UIAlertController * finishedCreateAlert= [UIAlertController + alertControllerWithTitle:@"Backup Creation Completed" + message:@"The backup has been successfully created!" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) + { + + _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/mobile/Library/FlashBack/Backups/" error:nil]; + [self->selectedBackupPickerView reloadAllComponents]; + + [finishedCreateAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + [finishedCreateAlert addAction:ok]; + + [self presentViewController:finishedCreateAlert animated:YES completion:nil]; + + /*pid_t pid; + int status; + const char* args[] = {"killall", "backboardd", NULL, NULL}; + posix_spawn(&pid, "/bin/bash", NULL, NULL, (char* const*)args, NULL); + waitpid(pid, &status, WEXITED);*/ + + } + }]; + [createBackupAlert addAction:confirmAction]; + [createBackupAlert addAction:[UIAlertAction cancelAction]]; + [self presentViewController:createBackupAlert animated:YES completion:nil]; } - (IBAction)restoreBackup:(id)sender { - - if (backupNameSelected == nil){ - - UIAlertController * selectBackupAlert= [UIAlertController - alertControllerWithTitle:@"Select a Backup!" - message:@"Scroll through the list then let it settle on an item to select the backup." - preferredStyle:UIAlertControllerStyleAlert]; - - [selectBackupAlert addAction:[UIAlertAction okAction]]; - - [self presentViewController:selectBackupAlert animated:YES completion:nil]; - - } - else{ - - UIAlertController * restoreBackupAlert= [UIAlertController - alertControllerWithTitle:@"Restore Backup" - message:@"Your device will revert to the selected backup! Please wait for your device to respring." - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) - { - - //RUN RESTORE SCRIPT - - NSTask *restoreTask = [[NSTask alloc] init]; - [restoreTask setLaunchPath:@"/bin/bash"]; - [restoreTask setArguments:@[ @"FBRestore", backupNameSelected, stringTweaksEnabled, stringIconsEnabled, stringWallpaperEnabled]]; - [restoreTask launch]; - - UIAlertController * finishedRestoreAlert= [UIAlertController - alertControllerWithTitle:@"Restoring from backup" - message:@"Your device will respring when the process is completed." - preferredStyle:UIAlertControllerStyleAlert]; - [self presentViewController:finishedRestoreAlert animated:YES completion:nil]; - - [restoreBackupAlert dismissViewControllerAnimated:YES completion:nil]; - - }]; - - [restoreBackupAlert addAction:ok]; - [restoreBackupAlert addAction:[UIAlertAction cancelAction]]; - - [self presentViewController:restoreBackupAlert animated:YES completion:nil]; - } + + if (backupNameSelected == nil){ + + UIAlertController * selectBackupAlert= [UIAlertController + alertControllerWithTitle:@"Select a Backup!" + message:@"Scroll through the list then let it settle on an item to select the backup." + preferredStyle:UIAlertControllerStyleAlert]; + + [selectBackupAlert addAction:[UIAlertAction okAction]]; + + [self presentViewController:selectBackupAlert animated:YES completion:nil]; + + } + else{ + + UIAlertController * restoreBackupAlert= [UIAlertController + alertControllerWithTitle:@"Restore Backup" + message:@"Your device will revert to the selected backup! Please wait for your device to respring." + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) + { + + //RUN RESTORE SCRIPT + + NSTask *restoreTask = [[NSTask alloc] init]; + [restoreTask setLaunchPath:@"/bin/bash"]; + [restoreTask setArguments:@[ @"FBRestore", backupNameSelected, stringTweaksEnabled, stringIconsEnabled, stringWallpaperEnabled]]; + [restoreTask launch]; + [restoreTask waitUntilExit]; + + NSTask *killPrefsTask = [[NSTask alloc] init]; + [killPrefsTask setLaunchPath:@"/bin/bash"]; + [killPrefsTask setArguments:@[ @"killall", @"cfprefsd"]]; + [killPrefsTask launch]; + [killPrefsTask waitUntilExit]; + + NSTask *respringTask = [[NSTask alloc] init]; + [respringTask setLaunchPath:@"/bin/bash"]; + [respringTask setArguments:@[ @"sbreload"]]; + [respringTask launch]; + [respringTask waitUntilExit]; + + UIAlertController * finishedRestoreAlert= [UIAlertController + alertControllerWithTitle:@"Restoring from backup" + message:@"Your device will respring when the process is completed." + preferredStyle:UIAlertControllerStyleAlert]; + [self presentViewController:finishedRestoreAlert animated:YES completion:nil]; + + [restoreBackupAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + + [restoreBackupAlert addAction:ok]; + [restoreBackupAlert addAction:[UIAlertAction cancelAction]]; + + [self presentViewController:restoreBackupAlert animated:YES completion:nil]; + } } - (IBAction)updateBackup:(id)sender { - - if (backupNameSelected == nil){ - - UIAlertController * updateBackupAlert= [UIAlertController - alertControllerWithTitle:@"Select a Backup!" - message:@"Scroll through the list then let it settle on an item to select the backup." - preferredStyle:UIAlertControllerStyleAlert]; - - [updateBackupAlert addAction:[UIAlertAction okAction]]; - - [self presentViewController:updateBackupAlert animated:YES completion:nil]; - - } - else{ - - UIAlertController * updateBackupAlert= [UIAlertController - alertControllerWithTitle:@"Update Backup" - message:@"The selected backup will be overwritten! Please wait until the completion pop-up appears" - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) - { - - - [updateBackupAlert dismissViewControllerAnimated:YES completion:nil]; - - NSTask *deleteTask = [[NSTask alloc] init]; - [deleteTask setLaunchPath:@"/bin/bash"]; - [deleteTask setArguments:@[ @"FBDelete", backupNameSelected]]; - [deleteTask launch]; - [deleteTask waitUntilExit]; - - NSTask *createTask = [[NSTask alloc] init]; - [createTask setLaunchPath:@"/bin/bash"]; - [createTask setArguments:@[ @"FBCreate", backupNameSelected, stringTweaksEnabled, stringIconsEnabled, stringWallpaperEnabled]]; - [createTask launch]; - [createTask waitUntilExit]; - - UIAlertController * finishedUpdateAlert= [UIAlertController - alertControllerWithTitle:@"Backup Update Completed" - message:@"The backup has been successfully updated!" - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) - { - - _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/mobile/Library/FlashBack/Backups/" error:nil]; - [self->selectedBackupPickerView reloadAllComponents]; - }]; - [finishedUpdateAlert addAction:ok]; - - [self presentViewController:finishedUpdateAlert animated:YES completion:nil]; - - - }]; - UIAlertAction* cancel = [UIAlertAction cancelAction]; - - [updateBackupAlert addAction:cancel]; - [updateBackupAlert addAction:ok]; - - [self presentViewController:updateBackupAlert animated:YES completion:nil]; - } + + if (backupNameSelected == nil){ + + UIAlertController * updateBackupAlert= [UIAlertController + alertControllerWithTitle:@"Select a Backup!" + message:@"Scroll through the list then let it settle on an item to select the backup." + preferredStyle:UIAlertControllerStyleAlert]; + + [updateBackupAlert addAction:[UIAlertAction okAction]]; + + [self presentViewController:updateBackupAlert animated:YES completion:nil]; + + } + else{ + + UIAlertController * updateBackupAlert= [UIAlertController + alertControllerWithTitle:@"Update Backup" + message:@"The selected backup will be overwritten! Please wait until the completion pop-up appears" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) + { + + + [updateBackupAlert dismissViewControllerAnimated:YES completion:nil]; + + NSTask *deleteTask = [[NSTask alloc] init]; + [deleteTask setLaunchPath:@"/bin/bash"]; + [deleteTask setArguments:@[ @"FBDelete", backupNameSelected]]; + [deleteTask launch]; + [deleteTask waitUntilExit]; + + NSTask *createTask = [[NSTask alloc] init]; + [createTask setLaunchPath:@"/bin/bash"]; + [createTask setArguments:@[ @"FBCreate", backupNameSelected, stringTweaksEnabled, stringIconsEnabled, stringWallpaperEnabled]]; + [createTask launch]; + [createTask waitUntilExit]; + + UIAlertController * finishedUpdateAlert= [UIAlertController + alertControllerWithTitle:@"Backup Update Completed" + message:@"The backup has been successfully updated!" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) + { + + _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/mobile/Library/FlashBack/Backups/" error:nil]; + [self->selectedBackupPickerView reloadAllComponents]; + }]; + [finishedUpdateAlert addAction:ok]; + + [self presentViewController:finishedUpdateAlert animated:YES completion:nil]; + + + }]; + UIAlertAction* cancel = [UIAlertAction cancelAction]; + + [updateBackupAlert addAction:cancel]; + [updateBackupAlert addAction:ok]; + + [self presentViewController:updateBackupAlert animated:YES completion:nil]; + } } - (IBAction)packageBackup:(id)sender { - - if (backupNameSelected == nil){ - - UIAlertController * selectBackupAlert= [UIAlertController - alertControllerWithTitle:@"Select a Backup!" - message:@"Scroll through the list then let it settle on an item to select the backup." - preferredStyle:UIAlertControllerStyleAlert]; - [selectBackupAlert addAction:[UIAlertAction okAction]]; - - [self presentViewController:selectBackupAlert animated:YES completion:nil]; - - } - else{ - - UIAlertController * packageBackupAlert= [UIAlertController - alertControllerWithTitle:@"Package Backup" - message:@"This will package the selected backup to a .deb file." - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) - { - - UIAlertController * packageBackupWait= [UIAlertController - alertControllerWithTitle:@"Backup DEB" - message:@"The backup is being created. Please Wait. This dialogue will will be dismissed when finished. The DEB can be found in [/User/Documents/FlashBackDEBs]" - preferredStyle:UIAlertControllerStyleAlert]; - - [packageBackupAlert dismissViewControllerAnimated:YES completion:nil]; - - [self presentViewController:packageBackupWait animated:YES completion:nil]; - - - NSTask *packageTask = [[NSTask alloc] init]; - [packageTask setLaunchPath:@"/bin/bash"]; - [packageTask setArguments:@[ @"FBPackage", backupNameSelected]]; - [packageTask launch]; - [packageTask waitUntilExit]; - - - [packageBackupWait dismissViewControllerAnimated:YES completion:nil]; - - }]; - UIAlertAction* cancel = [UIAlertAction cancelAction]; - - [packageBackupAlert addAction:cancel]; - [packageBackupAlert addAction:ok]; - - [self presentViewController:packageBackupAlert animated:YES completion:nil]; - } + + if (backupNameSelected == nil){ + + UIAlertController * selectBackupAlert= [UIAlertController + alertControllerWithTitle:@"Select a Backup!" + message:@"Scroll through the list then let it settle on an item to select the backup." + preferredStyle:UIAlertControllerStyleAlert]; + [selectBackupAlert addAction:[UIAlertAction okAction]]; + + [self presentViewController:selectBackupAlert animated:YES completion:nil]; + + } + else{ + + UIAlertController * packageBackupAlert= [UIAlertController + alertControllerWithTitle:@"Package Backup" + message:@"This will package the selected backup to a .deb file." + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) + { + + UIAlertController * packageBackupWait= [UIAlertController + alertControllerWithTitle:@"Backup DEB" + message:@"The backup is being created. Please Wait. This dialogue will will be dismissed when finished. The DEB can be found in [/User/Documents/FlashBackDEBs]" + preferredStyle:UIAlertControllerStyleAlert]; + + [packageBackupAlert dismissViewControllerAnimated:YES completion:nil]; + + [self presentViewController:packageBackupWait animated:YES completion:nil]; + + + NSTask *packageTask = [[NSTask alloc] init]; + [packageTask setLaunchPath:@"/bin/bash"]; + [packageTask setArguments:@[ @"FBPackage", backupNameSelected]]; + [packageTask launch]; + [packageTask waitUntilExit]; + + + [packageBackupWait dismissViewControllerAnimated:YES completion:nil]; + + }]; + UIAlertAction* cancel = [UIAlertAction cancelAction]; + + [packageBackupAlert addAction:cancel]; + [packageBackupAlert addAction:ok]; + + [self presentViewController:packageBackupAlert animated:YES completion:nil]; + } } - (IBAction)deleteBackup:(id)sender { - - if (backupNameSelected == nil){ - - UIAlertController * selectBackupAlert= [UIAlertController - alertControllerWithTitle:@"Select a Backup!" - message:@"Scroll through the list then let it settle on an item to select the backup." - preferredStyle:UIAlertControllerStyleAlert]; - - [selectBackupAlert addAction:[UIAlertAction okAction]]; - - [self presentViewController:selectBackupAlert animated:YES completion:nil]; - - } - - UIAlertController * deleteBackupAlert= [UIAlertController - alertControllerWithTitle:@"Delete Backup" - message:@"The selected backup will be deleted!" - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) - { - - NSTask *deleteTask = [[NSTask alloc] init]; - [deleteTask setLaunchPath:@"/bin/bash"]; - [deleteTask setArguments:@[ @"FBDelete", backupNameSelected]]; - [deleteTask launch]; - [deleteTask waitUntilExit]; - - UIAlertController * deleteFinishedAlert= [UIAlertController - alertControllerWithTitle:@"Backup Deleted" - message:@"The backup has been deleted successfully." - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* okey = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) - { - - _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/mobile/Library/FlashBack/Backups/" error:nil]; - [self->selectedBackupPickerView reloadAllComponents]; - - [deleteFinishedAlert dismissViewControllerAnimated:YES completion:nil]; - - }]; - - [deleteFinishedAlert addAction:okey]; - - [self presentViewController:deleteFinishedAlert animated:YES completion:nil]; - }]; - - [deleteBackupAlert addAction:ok]; - [deleteBackupAlert addAction:[UIAlertAction cancelAction]]; - - [self presentViewController:deleteBackupAlert animated:YES completion:nil]; + + if (backupNameSelected == nil){ + + UIAlertController * selectBackupAlert= [UIAlertController + alertControllerWithTitle:@"Select a Backup!" + message:@"Scroll through the list then let it settle on an item to select the backup." + preferredStyle:UIAlertControllerStyleAlert]; + + [selectBackupAlert addAction:[UIAlertAction okAction]]; + + [self presentViewController:selectBackupAlert animated:YES completion:nil]; + + } + + UIAlertController * deleteBackupAlert= [UIAlertController + alertControllerWithTitle:@"Delete Backup" + message:@"The selected backup will be deleted!" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) + { + + NSTask *deleteTask = [[NSTask alloc] init]; + [deleteTask setLaunchPath:@"/bin/bash"]; + [deleteTask setArguments:@[ @"FBDelete", backupNameSelected]]; + [deleteTask launch]; + [deleteTask waitUntilExit]; + + UIAlertController * deleteFinishedAlert= [UIAlertController + alertControllerWithTitle:@"Backup Deleted" + message:@"The backup has been deleted successfully." + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* okey = [UIAlertAction okActionWithHandler:^(UIAlertAction * action) + { + + _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/mobile/Library/FlashBack/Backups/" error:nil]; + [self->selectedBackupPickerView reloadAllComponents]; + + [deleteFinishedAlert dismissViewControllerAnimated:YES completion:nil]; + + }]; + + [deleteFinishedAlert addAction:okey]; + + [self presentViewController:deleteFinishedAlert animated:YES completion:nil]; + }]; + + [deleteBackupAlert addAction:ok]; + [deleteBackupAlert addAction:[UIAlertAction cancelAction]]; + + [self presentViewController:deleteBackupAlert animated:YES completion:nil]; } - (UIStatusBarStyle)preferredStatusBarStyle { - - return UIStatusBarStyleLightContent; - } + + return UIStatusBarStyleLightContent; +} - (void)viewDidLoad { - [super viewDidLoad]; - - UIButton *createBackupButton = [UIButton buttonWithType:UIButtonTypeSystem]; - [createBackupButton addTarget:self action:@selector(createBackup:) forControlEvents:UIControlEventTouchUpInside]; - [createBackupButton setImage:[UIImage imageNamed:@"create"] forState:UIControlStateNormal]; - createBackupButton.tintColor = [UIColor systemBlueColor]; - self.navigationItem._largeTitleAccessoryView = createBackupButton; - // Do any additional setup after loading the view. - - selectedBackupPickerView.delegate=self; - selectedBackupPickerView.dataSource=self; - - // MARK: List of Backups is found and added to this array - //_backupFolderArray = @[@"one",@"two",@"three"]; - _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/mobile/Library/FlashBack/Backups/" error:nil]; - + [super viewDidLoad]; + + UIButton *createBackupButton = [UIButton buttonWithType:UIButtonTypeSystem]; + [createBackupButton addTarget:self action:@selector(createBackup:) forControlEvents:UIControlEventTouchUpInside]; + [createBackupButton setImage:[UIImage imageNamed:@"create"] forState:UIControlStateNormal]; + createBackupButton.tintColor = [UIColor systemBlueColor]; + self.navigationItem._largeTitleAccessoryView = createBackupButton; + // Do any additional setup after loading the view. + + selectedBackupPickerView.delegate=self; + selectedBackupPickerView.dataSource=self; + + // MARK: List of Backups is found and added to this array + //_backupFolderArray = @[@"one",@"two",@"three"]; + _backupFolderArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/mobile/Library/FlashBack/Backups/" error:nil]; + } - (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - - [[selectedBackupPickerView.subviews objectAtIndex:1] setBackgroundColor:[UIColor colorWithWhite:25.f/225.f alpha:0.5]]; - [[selectedBackupPickerView.subviews objectAtIndex:2] setBackgroundColor:[UIColor colorWithWhite:25.f/225.f alpha:0.5]]; + [super viewDidLayoutSubviews]; + + [[selectedBackupPickerView.subviews objectAtIndex:1] setBackgroundColor:[UIColor colorWithWhite:25.f/225.f alpha:0.5]]; + [[selectedBackupPickerView.subviews objectAtIndex:2] setBackgroundColor:[UIColor colorWithWhite:25.f/225.f alpha:0.5]]; } -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ - if (_backupFolderArray == nil) return; - - backupNameSelected = [_backupFolderArray objectAtIndex:row]; - selectedBackupText.text=backupNameSelected; - - selectedBackupURL = [NSMutableString stringWithString: @"/var/mobile/Library/FlashBack/Backups/"]; - [selectedBackupURL appendString: backupNameSelected]; - - selectedBackupImageURL=selectedBackupURL; - - [selectedBackupImageURL appendString: @"/SBFolder/LockBackgroundThumbnail.jpg"]; - NSLog(@"%@", selectedBackupImageURL); - NSURL *url = [NSURL fileURLWithPath:selectedBackupImageURL]; - NSData *data = [NSData dataWithContentsOfURL:url]; - selectedBackupImage.image = [UIImage imageWithData:data]; - - NSLog(@"%@", backupNameSelected); + if (_backupFolderArray == nil) return; + + backupNameSelected = [_backupFolderArray objectAtIndex:row]; + selectedBackupText.text=backupNameSelected; + + selectedBackupURL = [NSMutableString stringWithString: @"/var/mobile/Library/FlashBack/Backups/"]; + [selectedBackupURL appendString: backupNameSelected]; + + selectedBackupImageURL=selectedBackupURL; + + [selectedBackupImageURL appendString: @"/SBFolder/LockBackgroundThumbnail.jpg"]; + NSLog(@"%@", selectedBackupImageURL); + NSURL *url = [NSURL fileURLWithPath:selectedBackupImageURL]; + NSData *data = [NSData dataWithContentsOfURL:url]; + selectedBackupImage.image = [UIImage imageWithData:data]; + + NSLog(@"%@", backupNameSelected); } -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ - return _backupFolderArray.count; + return _backupFolderArray.count; } -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ - return 1; + return 1; } - (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component { - NSString *name = _backupFolderArray[row]; - return [[NSAttributedString alloc] initWithString:name attributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}]; + NSString *name = _backupFolderArray[row]; + return [[NSAttributedString alloc] initWithString:name attributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}]; } @end diff --git a/Pods/Pods.xcodeproj/xcuserdata/micahgomez.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/micahgomez.xcuserdatad/xcschemes/xcschememanagement.plist index 31e1866..c9e76eb 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/micahgomez.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/micahgomez.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Pods-FlashBack.xcscheme_^#shared#^_ orderHint - 0 + 1 SDWebImage.xcscheme_^#shared#^_