From a6138a41179db946b090a0f4e242fdefd4f9f11e Mon Sep 17 00:00:00 2001 From: Anton Kiland Date: Thu, 2 Jan 2014 13:34:02 +0100 Subject: [PATCH] Initial commit. --- .gitignore | 15 + MagicWallpaper/Info.plist | 32 ++ MagicWallpaper/MagicWallpaper.h | 6 + MagicWallpaper/MagicWallpaper.m | 94 ++++++ MagicWallpaper/Prefix.pch | 10 + MagicWallpaper/magic-wallpaper1@2x.png | Bin 0 -> 8958 bytes MagicWallpaper/magic-wallpaper2@2x.png | Bin 0 -> 9778 bytes ProceduralWallpaper.xcodeproj/project.pbxproj | 311 ++++++++++++++++++ README.md | 32 ++ screenshot.png | Bin 0 -> 19123 bytes 10 files changed, 500 insertions(+) create mode 100644 .gitignore create mode 100644 MagicWallpaper/Info.plist create mode 100644 MagicWallpaper/MagicWallpaper.h create mode 100644 MagicWallpaper/MagicWallpaper.m create mode 100644 MagicWallpaper/Prefix.pch create mode 100644 MagicWallpaper/magic-wallpaper1@2x.png create mode 100644 MagicWallpaper/magic-wallpaper2@2x.png create mode 100644 ProceduralWallpaper.xcodeproj/project.pbxproj create mode 100644 README.md create mode 100644 screenshot.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7cd5639 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +build/* +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +*.xcworkspace +!default.xcworkspace +xcuserdata +profile +*.moved-aside +.DS_Store \ No newline at end of file diff --git a/MagicWallpaper/Info.plist b/MagicWallpaper/Info.plist new file mode 100644 index 0000000..fe512fa --- /dev/null +++ b/MagicWallpaper/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + se.kiland.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + SBProceduralWallpaperClassNames + + MagicWallpaper + + NSHumanReadableCopyright + Copyright © 2014 Anton Kiland. All rights reserved. + + diff --git a/MagicWallpaper/MagicWallpaper.h b/MagicWallpaper/MagicWallpaper.h new file mode 100644 index 0000000..04431ab --- /dev/null +++ b/MagicWallpaper/MagicWallpaper.h @@ -0,0 +1,6 @@ +#import +#import + +@interface MagicWallpaper : SBFProceduralWallpaper + +@end diff --git a/MagicWallpaper/MagicWallpaper.m b/MagicWallpaper/MagicWallpaper.m new file mode 100644 index 0000000..b78740f --- /dev/null +++ b/MagicWallpaper/MagicWallpaper.m @@ -0,0 +1,94 @@ +#import "MagicWallpaper.h" + +@interface MagicWallpaper () + +@end + +@implementation MagicWallpaper + +#pragma mark - Wallpaper information + +@synthesize delegate = _delegate; + ++ (NSString *)identifier +{ + return @"MagicWallpaper"; +} + ++ (BOOL)colorChangesSignificantly +{ + return YES; +} + ++ (NSArray *)presetWallpaperOptions +{ + return @[ + @{ @"kSBUIMagicWallpaperThumbnailNameKey": @"magic-wallpaper1", + @"color": @"red" }, + @{ @"kSBUIMagicWallpaperThumbnailNameKey": @"magic-wallpaper2", + @"color": @"green" } + ]; +} + +- (void)setWallpaperOptions:(NSDictionary *)options +{ + UILabel *label = (UILabel *)[self viewWithTag:2]; + if ([options[@"color"] isEqualToString:@"red"]) { + label.textColor = [UIColor redColor]; + } else { + label.textColor = [UIColor greenColor]; + } +} + +- (void)setWallpaperVariant:(int)variant +{ +} + + +#pragma mark - Wallpaper implementation + +- (id)initWithFrame:(CGRect)frame +{ + if (!(self = [super initWithFrame:frame])) + return nil; + + UILabel *label = [[UILabel alloc] initWithFrame:self.bounds]; + label.tag = 1; + label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + label.text = @"BBQ"; + label.textColor = [UIColor whiteColor]; + label.font = [UIFont boldSystemFontOfSize:50]; + label.textAlignment = NSTextAlignmentCenter; + [self addSubview:label]; + + label = [[UILabel alloc] initWithFrame:self.bounds]; + label.tag = 2; + label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + label.text = @"BBQ"; + label.textColor = [UIColor redColor]; + label.font = [UIFont boldSystemFontOfSize:50]; + label.textAlignment = NSTextAlignmentCenter; + + UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init]; + UIInterpolatingMotionEffect *xAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; + UIInterpolatingMotionEffect *yAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis]; + + NSArray *motionEffects = @[ xAxis, yAxis ]; + for (UIInterpolatingMotionEffect *effect in motionEffects) { + effect.maximumRelativeValue = @(100); + effect.minimumRelativeValue = @(-100); + } + + group.motionEffects = motionEffects; + [label addMotionEffect:group]; + + [self addSubview:label]; + + return self; +} + +- (void)setAnimating:(BOOL)animating +{ +} + +@end diff --git a/MagicWallpaper/Prefix.pch b/MagicWallpaper/Prefix.pch new file mode 100644 index 0000000..3fdee9d --- /dev/null +++ b/MagicWallpaper/Prefix.pch @@ -0,0 +1,10 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/MagicWallpaper/magic-wallpaper1@2x.png b/MagicWallpaper/magic-wallpaper1@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9488c4367356e198bbe00cec25a75769401fe59e GIT binary patch literal 8958 zcmeHsWm6nZ@a6(R5`qPS1t++>2ZCE5NN@}8zPL;9MHgoY9&8EjE{l7z!F6GQ;O>{- z-PL`G`@fi)nXaen>FJv8>FSC3tfqkTiu@G-0KidFl-2wadNF6GBAD^j*b%CV z{%-1P_EBw>+WW(K z;5Ed1clCaf48V*+i~1F}3Lw?=nGSSuZ9O!|#C_Tcz>p0=69l-nv=&Y?ciV%`pTxi;n(g)*6^ec1+tvmHJ*BILKmJ8(|u<^AaGY&>+jM zsFJ~*(8{R#&c=qAFC;&IFhh~OPh?pYlnJxkwTu()V*mu)S?d#hPWhD{L%c9Ev@kQ% z_xlaU^X_G0PJZVTnPunW_9^e?6y#$(gljS550`-&2cU|jLC~uRJ8^!kUe&3(8&Q~czQI=Cj=l1qC9rXiTQ)hbWAXqfu>cRhJUtDFuH{Stvu~Ft; ztpBF8>c?_!6-9Yw7Tc!lt!mse)n+i|%@+ex#8;{jbwu2)^u-TS&(Rls{0%G85GlH0 z0$%jK?t_!=*Y~WLWI@>uM7BU`6p4{H%oj5#XAXEh)58Fz*t2&uj{-QZztat^H}kU@n(;JW6v$)S6^oJqP|JO^!$#|5JJU`LEJ+ujH0{# zGT2^5642Kz&!3_HkZbh%jXH0S_LSc->9wk>?qZhip0AxzXro=`kgB5u+W9I2TDPqnh7%6;9 zdb!Pk5moRtlN39ijS;{{-9N}aR5g%hUcnQ^U7g7}4jkvUesfNsGH7o$@ssn9lp}>8 zPEI06pN{!KEyo}1KRJIi{yI?L!g|Oya$Qkce2g%h$)H5d@8I!baR;!3_0kic4)WF4 z$KUY!Jx<;P5CkzjVLiPL0!YRN%g_)uyli?QDUJG3QBUQ^dkV%}#@F~mSbVbRg(x$T zr1IMY8Tez-zyVxyYPU3D8O`@($;*l}#jj_{HQ$!Uc!qlBU!EWzGG}lHDW*3@chHk~6@_>>Dx7!c5FVPFb3Q!G0i+*Yr$ZtgSeeX-7`!plZ zqsn7gt9|-&(`t}O*@r=f!IS}_Sul%Ia;{9zA5p4cG1t-nY!F>UUu33K5Gur+9IEdmk#Y4)*S6@Z4B+wFS|ed zD$c&deaZRaQqiSlQE^*gRpIo-LCgO;NJHpL;^!&dwW6Spf#$e@paY7d+)WYK&hoDi z0aXDyfpj~HY2-}i?ELHnoXGBIUc5%6U~u|uessEGTC`dK`f1J!PHd}dn?DmYs%`DZ zQ=j=|oO7ob^i3@Uq;1o!Rx=q7O+E@(X>6Nl!@E%QWAD`NeATJesTAn+`1uiWmvHBe z6OF+h?io&rv4S!8P5xW$w|B3XUgwjRlcSS!2-x$txu^{7iG)+GTOEs54`d+K?Ka+R>u{^4Inbd zT%g3zENGN*{Fo4^>*^Q`YI4vc95|HM+)s7uXm3>I|2l0 zgv}g!%)VRG2>qmWzt|~L` zS*7mi`}cG1m*v=&%G3SRu$!wF0n)0{fqnC+Yv@ZP@rZ6M_K zlvC6<-&3j&F~S(B)qS(%1n5ciQZb?AprqgT$XCGE<;>zNk%akQ>hep^zk-L$7qywX0VM-%#dX_(EX^0A zLV|1Bfqd;EKo6HJiv*Kt0BPB5ZUzmm9?DPVCA9G5|{3x?$OG} zMcNe}?YEl0y0n6K)ANoi=PF%(`@s2+Xa6+X!7rRwk3uCN{@GXdM;r_H&iQ6*hmTM9 zh7LFmY=BwFxCj)SFdewTMCcX*hQm{GWLRQvX>_O`-RZY@;=&S`=mY9(>^ zL$Unh#T@qRD|4m`qR_z+I5ROm_95gi2LTNE_QWE%UgTnSyF!P?`)ega&PxMs~bZQ>gwq(LPbrS4&9J;w<8;6=_at%-yh1lt{f)e zqIbJj`BW#Q!rm*pcZ2Ujg`lgs-u2JF9}Jr@2{EIb&z&V(Q-QmKD;@28*E(ykRj#1# zC*RKshWZ!tKLt5cxl@P={N-CdXWpObBsdzbH+2v8l{C1?ylZh+^{?89IZRF63fh80 zIDJI#R4*K@3z52mrrr`lK~McIknT&>p--SL{O-)h&Wn=8vGAI|ra-kwb%}tyM?dSf zn}o$285ez*_O-#TcR3@$iNU6qz1uP{*m~l%O}&lHGXO2~{DA;>#_V5N`O;NU-va=^ zCj4)p0J3vQ0RU1nCE1VKJ}8HIzK%w4VARxjQhhQ}b>y4I&noO=btR-t^!aZbwt98czi|j zk#M^tsYpO%DOM@gXIm|VB`;AnZYG^n!6$I)$Y)zovsgf+;1@MUnS#9#7F41|ZIP_k zk)>$=1OETg8yvFh8B$~84UWtpZ7K&wc`L;HkE%?Hj3#%bGd>0-^$Z3E#AwcDbBv|( z5Fr_viq*D}g9(PgB0{yz7-S>HnppkW_2ey9j9@1Ddk$uruO`9j>& z*pXh$n`a{_4?{ieth4Q+m=I5&!A-6(y!pUg(~R~g+~HMF_1PL*^XTpG@y%|x^<$|5 z$zmxdQMzZHHADBf*xc;apLEx>aa<$88)#l-%7II+HR5IF&#sqV#=VZK1Ub^Cvi(a_ z)ZjG=ALC{<_Q{7EIv2z1{L|3;fs-Zo$3FzOr=t$rHe*7+S9Eht6$>gW;93;vnCjiE zIm(Y;o(U7nZU9eeYtN$`GEv)ND{x)G$3c2`Ney@UU3QQ+M2y{3{La(S3IbMUi0T%; zOQR{Xwx=j)Tx>l{dsrROMJ%4um)fuK@-gHe2J1s94l-P-+tpsN+#{OuH&A1}z(d>W zAjvW@!EeNRvya_2o-*!pEWW$py;x)T zc4iePj>`4+j|-xyv2U|U&Bn|(-=UJ?%+C!Q#CuZ>Usjj)C1WJ~uR?;gnm%oXpD8e1 zD=W0Rj@%}e&eqiwDO~O9j)~oJuFNKN6@OS7C3GM3={AyBWr8PCqu$r`A-r ze*tZCwa-Jt0t4q>by^ggehA+89T}hJ8ug^3t!b=DB}sRhHJ)4H?No#rzrVam%Cjg# zly1{wwkERj%Z{Y@rQ^y{x?9imIqNAQ8#Jxn zk4A%jiB)3V?z*)ZVGVwVDgA41G$!p~Y%y^xC|px0Z`#l^`*b)ae{Z?5OCpGCuVE9j zvL?AV-AIDd*MGuF3*GnoF|hSx8U1BL%H(c$-IJGyrQ==lVxt2*V;|)W3|{rCUzA$p z6x;Y^Wni`&?+Wd6)04HY`=Fq4x#69JTlB^+5YB9lDML=|uBXKJrd;keQz0+Spe$3i zA`UOFETIW6FtEUs!MH# z0M|vlGeJwuGv$JYxCWt0uEg1O&QXQq;E%mXl@{)%78>gT6O|=>VU4dZblhBaB3DJd z)Q%*d7xwDNu7SB5^t`mV&_etUsH*nS2#BV*E-M% zp1y8T@-_?@@^H$r4}d7_lgZ<$#Ou|2*e55drf=?+1FybU<&k?r@x0W7f&DNCNR(*z zM>LWFBl1=nCOC$U8S!p;lzxG(TKrgGIHr+9c^QwDc8L10YrMkFzGX7DyRVb{NaqENUl^t6XPzP z=4>E#BO@{c+G%^eU6Hq;;J7|^fTof?+I7+@Y{%vrlaq#7Ef)(4NTWSTpkd|-%}IDH zAi&`##;-a^#~i2mls||V{}4aQHhFlD6IMm)USvh>zJ2OL^E+K}DS};WDy)!V<&B&R`KP61Je^XQX?KU=~erZOP`=(Kw zqw;*7QWMD2j`1QqH@RH}O@%u_i;w=|;-Z1-UBGgT#N>g${jFe`6^TQE@!Vh=-gNhT zW|A0b3qLpdQVTz!^cEWrp8$*Qrwb9cV2vrk)_ISo+*KqUw$prEUw~g5k5>GxwA7K= z`fLx8;}-8BH!c6GdKvX!>U#(~!n(|!BWy?F(c(}{~@QE?=}YN-Pla)V^} zXg$?u4l5K0+pL3`n|X18c8c+4D2$vF;93>axYl?>!8o$es4jnH>?yQUK}_JPo=I_B zuXfp~0WUohVP(bhL*;HW64Gmo^GEEaQYd$qHi{I(Shq;URCo1T3OubWkeo?F|M zgETVtsKM242AE}>?v!rzAKJv;nK8l{xQsY7=qTY-re9kF$FOb54}Dnk&%zf)_!tey z_6^AA-R|pMul1OL;QaPDicEy(}8~Nycxd_UAfy;B-7K~{-Y>g$i%;E zD4ITCxxftY_$RqRbD3V3{3raeRsHLOCh4?cE5~7L01osxs*6%DBu2%<>hCPvoYO+a z7S=C4*S6psXMsXO=*Juwj-J`lPy~uMzB3rNQpJ*h*n?A*n%|k3lr)oDw@dYa(f@?G zQDna?NF6DrP;6V#+O`0Z6vfD#ataI?gV=kB zr_21i?&e=UY#ZE-Ra~swxEP!`s=fb@B-M|=C7#Bg&l$cvjLd#yn!4tku3UMR|G#nA zD~vnwZCcb1a2MxPSwiFNu;mR2)^#yI_R=a4CYlwH-;Q54Cf5tIlS5|4Pdi7Iw_0`& zi~;2cwmHtk>o;Ux;a8)dv=@5{HAI%)+ z6eC=?R(&5GOR}t4O%17jfFnYuyZv{z2cLb5e?`i~IzpZ|B#{7de@oT55xx{%r{4@) zl{{fIac=vUQTJ#6<>lTts$28pSd^c{3=9mmRhwiWDqbS+jn&ZR?fu%h$uXGI$L((v z#_#@w(&`P_wS_*6V-94PlFud?Zos0O~ z`5E}%#LDk^igF}+UkumEzI*yR-^K{j4zXcyF}vq?m*N~AX$*av8EQUADPD+zvPM5noUTq zRDhp6kLi&y;;or;YO{+$(B*Scw&~ZE=K;gf!{?#DGO(1_GrNG)#nz7x_ZLrt2YwdG zDeS2-(o4?P%w!NcM`dg_+Ojdi5L1cb9B>e%<0OjoAx@8g&%CB26o>SmiC>Q>;KXag zBs3;uC5_yqZYMV|kkf4bFy~1{>vMuHl0;3MDgPJc8xEBGxaj|CiE7{z9-|qdn=(ti zu$n;OXo=V1;$;akrZJyc^@4d1w~oYGbo;8jKE2immVyqE^f5ZOW6Nq}V?ag0oCE|Y&AzELQob&E`Xy@{Uu@Lo zvQNjkJ>*oh0axN1Ddyl7JKnNHMN5QGmx6f4UhLYg+HvaCMYl-|PH<((TS69J{(2cT zgeXJC*kI5R1;Tm9ww<|PKObMz;N!q!MIv&mHtX;VUV_F7Jj~#4`MRBHB;+RzIbLR0 zM}AtL5;c)75QX~XTPTb;OF(XS3i^TS;iaCx_G&M@L<)I#aYkO3{#WeI3u^x|jA00( zw1i}5r4*3JWf(HWb3+oMctf+#MDJ zD!ZjZtis+(!qMV);#z-DZ*kc`(;jcZ;AAqbgcfHH2v>J00r|)lWWB!Rhy{1dVi0YX zh48$#e9xt*yy5R02m1Y`T4U!er^MmfA!-VVe`<%CTT{aI0cMRl6z&q~g;y4jqh#>J z>JO$E;-bEam03@aH4dOC_tyQL}xYAicSsV~edwo0Zi4$%wW+F7NENy#H>{ zXvnfqH_%x5=Z;{ncNO5Yj(C1+oj{jTSEc!y>3(W^*?oy2 zmtB3@VZ-*elEn3~TW1{sCooR${FplWZA?6#E#FAI-)AH%8+{fnn!HeS*bJ_@x|-VP zwdMgra&)DxQ=HRV9Rgmm#wa!>=bNJX#YXmMgm)QG2LyM3M|C&DJA4CaOt9P!`kF1%m5xQTr?DpTiSEepl}H96N{saZyNjD#T) zWTQIL_R~xxoQtd44NpFfby5><+V2pwRya}=REBCx=5q+jhKVEGTkEhX-7R$eTq@*N zvrTjsuw#mD{4Nw*I1q&wswAHFnkm2d81zeF@t#OUkc_V38xq{u?AfAc4jX$$#ZQ3wU%nQC3Wsq3}rQKu3vs2-_f6U4c{cuQi*5#%0i(e3P^i865kJoe{Bbb z;Nsh$7clj|29nTS1ZCdQj|WhAVIfSe4f;U#sDOuMK%f`gG?{%Ti#nA~TJ!Z@0Oi%A z1F>4S-0TL^Kv-2$%N@Z8<>Rws`Kg$}dy9D+{#hN%py2I<9r)#FG`{|yiV>Hzj@USVd0RRA=lHv!gm$?A|K$6Bpe_6e5(Tf29 zus_(#$!RLd$Y{c9s2o(9u22Ac!eFSKHAm|`jm_V5X^ zis7sc*-zmQXbfMXG4+_(to{Jmh&c)kFfmF0B4IHoOGG0nk4LqX+?9np+CtY#qShYH4#J zelpLbf95#I>z7=?Mu2K#)NuaHpo8aAxkL_P6+m#;1VD^dDm~Wi&5+?OaiVJehs?Yr z_Rr*upLw(Bhko#>-}meW-T7N-P+ZhSh)*k|)kmj~CcBaiQC$@Krz8@l#Ga!*_@_8S zEAyF0NudwuHoijn$vA*WhAC!$C()rFdTnmdTm7N_ae{g<&Z@MC9*ZXDF_>6w*J?mJJE@puLovq<3&7_&M7}AA_zJ-a2 zu32KP=e^5>?0nc0g*EJP`yb!tc%IDHJf6k$c^)HmE{A%ANrBkL6p)JKXB{m-QM1&Axq9_>A}a3f<*nV9{g?&#Z?v{`HuaFjWV}l zL*mlP@5?!r)a4nO9Gfn;s4J)#F(hLJc zd}v)AM`s7aij~=kO#BVQ1B%`dO#2R<^be^BlKwiD zzYHNJ$^<i(grUHPjY2sr{M#!d{HiczsM~kS zMFK(TH91zOJKW|wT`LNn+!p*4E=C^0{*Gog9M6&?1I@3q(?#Gnp?Vlux5|dB55Ec8 zT$jSS-VL??>vk-H&hd42RC??1kbQbmOdLx_OGV_QFVTsqio9Ae(+p~g7?W`(3X$Ki zwz<%w3M@0oalUe}0Ql*;dpY|mds3`^@J79>%HSUH9C>F;d_knr>tHeZlY3qoL@k7u zoxs(lXLVG|HIFl&J^$&iBQ<{iABv3}7o=t%6Lcqv>Q}$0=Dv!>9`(nqm!A3jrd-86 zjU?!HKO^=h3S@o4e8LR`NPP*CqbF&=YC@HgMV3)CQ2EY8&62}{OW23W{{gKKX(EDL zew!$ra5&nt2j7a$HAO^Di-{s}S#hEmcal=;b$N_Oh(|smNtNX&DR+>_8VMrU^2I;J zKSo?NP~}r$hSq$_hc790nQq_Q(%hoXlaxy+wIs^1bg(@68$*2a?!Mj0$Ftb6ld<(D z8#C)O&b<|;zc$HZbEZFK?obRY_b+*Hy_LMhLMsd{KsF93`l(eQzY*RA?Mh)#n~>*K z8wsO<-h|0JxNpgFF;Rum``V1*wLe?)zfv-!S%cX=jQ zP*spYFwLGCzCV#MIX#J(du4wzEnf4!pcj5VJp}&&7p)SkR-5vgBL(UM^Ctp_bZmWj z>oasmxOa==Bh`cBb?iFSYsS7-C!YAPG`5bm5+D?PIbk|5Y?wMsDFFPa`M7fzcjt{4 zjm{b75k`Z)f<6@~A6Xkog}a2CPhL)mM#&}UAkgZpDtPtI3}oWy-;HY5#WyIh0CpRF zCFJ=|O}L8pm_KZkdKA^RZS-!mc6V%7_QL2w2Iose`p3MFMZG_nyZL(Ds%)}%+&Ka& zP%EnRR`lqqXe#R~k19_W*cMP1DjN@e-mc6}r#Tvb_Un#!*t7dJRK0Q%0n3zF3ru(f zV`RyF??#VOk0OXykGJY)>33xfD6=jzRS)A7<;c+;YTf?odF5rc<3D*@6=ax7D-;9>_h&``bPqFd)|-w)N@g-+=ab@}A-8`(2yO z)D6#`qn2NdzvkO|{j!d`%sM5H!ftNvU)>|_-rkN~S6v0{mmQ_=&g}~yoUV6_Jc9s2 z^dc6He=MN3^uj;ixbO|I13zl&zhf48+bnwXDcU|-q?qv)J|6Z8sc%qTr})P2rgwy- zxEW0Q$SqmQMZg-$(i9BXUZtyBwH+p9#?ZDE;a*-l);49z*`w2x;mp`^7WtxQtM zU1cdvDDNcEEK~B01*9ZhMYhIAVP(^_1&9l-tz zF(fRsrW3&5_TJOoIrH;E9#=D07uT;QUyy`OwLyD>zqRpx(=4{_N7vqpW2Ge?{YCwg z6`931E4(_dwPxD2gZ9#LPb;P>oM(OJ1WqUC8|~*1POB#&5_x`ER}Lp!3-?a>7Hh|k zPxr=-c#a$d>-gI=J|<+^bB|m{OOd{pcS&~y7!epz_#bHx9b6oMB9*Sql|)V{Lh*D; z;%>)c`KOE7oLN`G{8=jTp+%EL8XX!>PqVe_pL6>S`?CYz-B{}5RFyQpb}*e3T}WFM znxD`6Fr1JkMJrzJUbmZaUS2m!k`2u3pXYu793=F#d%>f)V9(;Uv|P?77#w^1F@yT5qj? zl_wB-20bt6>t4)P3v{A&qZSqX%fEcVb~pheIvJ=pcMF0@8Qo;uHM^<$Rc^!_Cns+O zZq4O!`-tADB0#o<`})1+-V(xrPuM9JcCSj}H^PxS~53IE(j zU)$E3xW#NaXG7<CGFNXNN2UrlBp{T-0M;#V7&i>sG+we#pphG_$SQ8af<)Oue#7?PA^txc9RORyMA5B^_#cI<`x`~ql%y6wlO+khoig%HKNXiF` zxPOk|({4wSBclA33rb`fsgZX}?r;bUEl?u>Q+t&E%j3rU1p6 zG7|E!t|$d=2n&iCyEGK0%o_FvZvBS?4YNW2!1^6(7OqbTAmr+8E^efBGE&Vedbn9h zawj2>@4w3bKQ&7R8}rW!X%8zCy;5|ygp#7LIuU-h*uKaT?(DS1n1-Iddg4UT3G~KU zfI4wQ(qO^l{DfU*^#X_;KQ#C zaaYP7;@Vcj<<1c{CJuF8eiNCi zy?CxhQujk|Yk|9)_8L}8;7#+it@f^1S}k)sxuce8OTX#f^`HyW8|OJQmKwpP!GhLO zKIJT_Y~p=BH`AKNgQitRx2->)z{-g9+Ok}=f4wa>P>JjPIPPzARC>b~v2z0!#eHK) z;%pJpR7|z@oLn8N_aUK(kfxA++^g?TEH|<%0Zui`3*ORRf|aTHJZ2nw4x2MlKerU< z;pvK+xw8ZLr;=>K90Q3l3F_P2wYNF`;XLy+*q5yLOFOz~_vLALzM=1f96`tdM7Yjk z-X@YuZTfz!Kc*zx2P`=Psmz--5FI?(QSpNsWab<^f~I<|hBB*((quL@Tr)h^p6y%} zlM)~EQMZ`egUt`0N|u+sKLpOVzMs1!!yP~N8B`xbra2Yy(`om5xc$>*La59gDJAig zLtlDpU0EQwGzgM!cRK{PINfCEwXv?4I$O_J0wK3eQSvCH9|MzjhKV5@Flg}^C8<%OIOp68I-WB+z* zr#5lk_uu%+QC8=VHpVvQa`p9^V?DJHEW`}(2r80-x3wTPhBZU4ioe%{hY$<|CD>NngBI#`j#4p+djir98pfj3+bdZucZB)X zdnvc`^+Bn2WL0y?tu1shVFb>?l_^(?%yn-)^~O<#VzC^%{8tfj zbGGt31fpKL0_WFOQ%1KHGu}#mlQ1v4w!H8z;TwZ$OG5N4X)1G&89<`IJuPT&+qjNR z%s_87vRm+c<+bo|f^juTI_qM$@C~N@eFiigw0GH(bi9nOM?LCo>e9$)oF&BVXft@MzmFK-Ze7R~ur~m8Vbj zPv~iM0rmHSi2zeS)GV}x-)NLl`Ag%}X*QV`eYc%wh+lfEMqXmmH-P%)H;a?eXuO$} z4WYI&PQE@kh|LMhmiq^!DU(ARRadlil1aMttQHZ2p3n@!>~a}?AeqhuF>w0bwa0Pt zeE7mTmU;xOsaJPp!rdsk0QuktP-&ST9Cs0|G3^Q;$W-WQEiIIgkpO)J{X<`~-!&{W;rk6cthUdS(Xjg{`R3yi**Dq4k?*uj=d^6#8Yk0g2dOaX3IH3_boWE)*SJhFf3_dm$o^OY>qWzehAg!ZC_8JOaku`1 z?j)o=XNBW-prW;nFLbN|@G@#EXX9Fv5@X`_bs05y$^*5xD07`*V1LEg!&a|1m##^# zVd6EKQbcC-e%-q;;^ZNIpOB1SS2QzNMy*%#0_a@%17=m-Pqlxfk9DbhRo3j4$ge=Z zp~(;zC7niG#ntTN^xRA{L*cwEZ1)%xo@qw_-9TO{&(V&BQn!0Baj(faSI^gZHC!Xv zDf&!d>4b!Yqvdsc#$#90HFve6xTY%WqMt(A9a--=j2msMdn6@!IfL@vGpcy-_B)VU zMWM5xs}+DXM>ya17s5Uf^9W8L@!y`z<@7q8`R*$ zWzQS?E@(C4g7*^atBiooZ@=F+lv`Rkhm+K4IBv@tGf@~;k0vPtOuAbR(GH!&~TVWuQN*or9U}sHFUB@iv{XSKg@P~Uczg3znT!AKILuRO2V{j8( z1alV+4rZ^{O_0B|{;TNbI&)sv3>;h`0*n2M8glT`0F3aK4LrhXDpVN!BU)IM5WQJ4l2Sh=1{{EqHr{kD0i%$(J&?3oxGwXM)5nC zl#Vj6a|u^aNCc!STyEx7ad@@em8~#(=cjQ%=|0m?TDU9Uk-~GTWx}g9ZFbxWr_#b( z)1b^F&vG!qqZ?+Q`g>iPL%e6PwEL9;KGQCLmcD2vspEn?AG_G3YOGrbasB;8I@`hO zhim4B(b_T&G}~h`AtuvHJ2OSsAzSVZjdFjHY^;L{%7x^Y<8U1_TUW#08Z|-Qndat) zg+S9M=S`3w(B-$U9MrVq%u~Tux^16@=gv(LLw8KCcE$NeOnD#r!H+{0GeGWiyAjE7 z%`m9$8037B`S+W@ga5g#h&?#$*?9U1?rjMw&B|~vF}N~$IQ^Jh)c2F@j{u}TGg|)g z@mE9sbygt~#m$+HbqGSw#mX@L`G17RYAb51$fOmpccn~}iznXZnV23nlimN-i@0&$ zdQ9Tncvji)g|v*wWX96$X`TM(o&QSW1*!5ONCJ1-MIQtHl=Q?NL>v2}vw};8Dz{-X zhy4;p95w8`j66m9RpQnBf4z?0-GImicxxT5*0QPBJg9hrX{YjcfS>4G*pXZ`NGfB+ z^=H2)UrCiE$4PRFt`&W+p^&7RAo8{qrFRecEI=t2*% z4cqq8j&kj2^B`Tl`WxJ%(s0cyd{?$;wkoL7=w|6rDos$)C-c+7=Y3q#qi9Ag(CVD? zmsXp=;g9Rm$Lf-+nr#VOTl1+PMj0>m1`s^KgRO8+ht!yYu6$JP;zF5`z!|Kk-imtJ?1 zFuQ!;V4yM zUjG~!JCU;J-Fn@$51z!!SO8`Fl4I8V7#01{)0*yg)29cWI2`$g4uUxNT`f!;`=hL!FLYqo-;%59bYRYeW(v zdzuLD&YNNGICEJctRJ-6i$*cB)tzc~pn7#t7}>`~;zDYst<5M^Zf@yMm$>BlexXU{ z%oziOO=b0Qge5XF7*3oey98ZM>w3vJ^wIG~t-@wJHR0)5+p4F%d~dD~tCGu>-*y2{ zEx_UAL>yK^yg*E@u<2!KlT|>R1-+z0%JX;d@FmYW>;Tkw)qk?TBD`W7@=X0wO_0c~ z;R=MO!37j|@!+?%3Idd=)gQusQ#uKab(i@O49&>p_AOz6<^E6kA_t@>-bLTMKnJ3t zd{0E3=9B_9oA5*nitT-jntm)>`^H?9Jl89oDI?qyKCdda0;OmOi-hyBf%p9Lexry6 zx%o)yaU>`#ox7^vo8+qvhtcp1BX_GLm2$yD@Cb3NWI?6qqfnY)e52#9F)RfTCuIGRmE|Mst#URLg z>*bc~Dol%Nn0S&bCHhpDVJ7}1z=Z!Mo}4hYyde98PL~6iHl;3zYvhhn>x&@}D$8)L zNvF=8LMN}c1^$eJX)g8@`tQ=K4{f|FGD8h>Z8(I&Nv4QEw}QU=tH^IuQ8IFLqlUEj z{;hM8M~VP`Ya!UH`!3Qryy1LmKeK8o@yiJ+q#GRb4Ss)~ekh(ms2=)saPD}GR^loB32slVd&4@)>}T)vVL2oZwh zGW;+k%%+6YG8#95ZhfC3oW~VapAu)0>gHG|w}oIkF6A?^+^_E`Y53aJYfeORfhnt$ z7s(?ksrEu-N1OiW|*_gw$ z5qDRADPST)AWZW6PD&4aUY6diw*<=)Zv~?qw>$GAd^f$F_h@fr$5(TleQKyx4(=cX z{lY^B)hsKF}&rv!R9;_S|_Uc)kv|Z236$%GqqfF?haI zdUGT6IEneZs+EI@BzDii79lK$vStxEdw~x`jr(AAuGWrW%|xBlfnSw;TrLlxch?EZ zxOA$fo&U~#c=q@`?>CDP6KR4Hm?4u&{9pN~NlqyQOW*@wM6vQI`Cf`Re&9LM*yb4s z6HmF*oQ+**9qbKlJ#RIo+|G{S*tV`zPcmXG(u*&!#owpK(>C4Xf)lb~G_r_PjuLnr zZ@3yco=R1>$T!7#3_dPwwVoBiIJ(u6`I3*{8Jq*R`5@da0%RIheQ8va`1>Akx5kV) zX*o{mT<6eriUbc)uJJ)Fh+vyyyZGdrCDzurhxOdT6#NUc0mI|_p25#q2JDQjKN%wH zklfl~InHLI+vGCy-m55aOm7yx=Uzw`v4;u?{dscoX%tU0<-RUfA1*6VA&#%=2qEgo zKS)0v?BP3@s+PSmjoOVsj(a8|+sx*XhvM+%Vu(HC{!~yLU9ld4qe2z zNQjF&2td^z=&&=kk@GS*p%!Dz&)HACEBr_q`=#N^O;exmE<*j%zsWX+dfLW!gKoWQ z2E#wR#%Dy~+XVy3{%_)s;}I4p#K9=gi-hh>O8YsP?$%OWQ@Wdo<*&#UsRC5^3lfQ z%G^j}7rkNkcuvRTDA!udGnT}6_!nbhcuq8nXH9~-(M1ROKOFik74)F9jB!CX*LDLr zG7h)Ixd@9rN6^Cv%8B^8PaoVj$}HX6|M#0~DVC2rbY$$J*Fr<%QUD;nML;z>@NOH4 zJDmI;9{55lKc$k&KkpQD^Z!Av3~s(jj1qf>yqUhCON-()w{0&S?es6$9qrBy;$H3_ z*nl({VrKBd4H^?C^)?p(LcACW5M4s{+bE` zB};oDtkc4+d7ap#p(_I@u%E?%kR~RkSXa3h-dmn_KZ5y1kok?_SE?6IT=-m?hx3I5 z=fWDaTGkAfZcD`QwNyev1}iC&ZbiOmjuVIDsJsZO$kveyzi9sN75;05|N6rJQxS0! a#F=zIWNRRF^wP8gD1B7_P%Uc_`o927I%@O) literal 0 HcmV?d00001 diff --git a/ProceduralWallpaper.xcodeproj/project.pbxproj b/ProceduralWallpaper.xcodeproj/project.pbxproj new file mode 100644 index 0000000..123acf8 --- /dev/null +++ b/ProceduralWallpaper.xcodeproj/project.pbxproj @@ -0,0 +1,311 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 3A171A0E1874D7D400CF8D08 /* MagicWallpaper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A171A0D1874D7D400CF8D08 /* MagicWallpaper.m */; }; + 3A171A101874D95000CF8D08 /* SpringBoardFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A171A0F1874D95000CF8D08 /* SpringBoardFoundation.framework */; }; + 3A171A111874D95700CF8D08 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A1719D51874D75800CF8D08 /* Foundation.framework */; }; + 3A171A131874D95A00CF8D08 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A171A121874D95A00CF8D08 /* UIKit.framework */; }; + 3A171A1F18758E8600CF8D08 /* magic-wallpaper1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3A171A1D18758E8600CF8D08 /* magic-wallpaper1@2x.png */; }; + 3A171A2018758E8600CF8D08 /* magic-wallpaper2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3A171A1E18758E8600CF8D08 /* magic-wallpaper2@2x.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 3A1719D51874D75800CF8D08 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 3A1719E31874D75800CF8D08 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 3A1719E61874D75800CF8D08 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 3A1719FF1874D77800CF8D08 /* MagicWallpaper.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MagicWallpaper.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A171A001874D77800CF8D08 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 3A171A041874D77800CF8D08 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3A171A081874D77800CF8D08 /* Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = ""; }; + 3A171A0C1874D7D400CF8D08 /* MagicWallpaper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MagicWallpaper.h; sourceTree = ""; }; + 3A171A0D1874D7D400CF8D08 /* MagicWallpaper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MagicWallpaper.m; sourceTree = ""; }; + 3A171A0F1874D95000CF8D08 /* SpringBoardFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SpringBoardFoundation.framework; path = System/Library/PrivateFrameworks/SpringBoardFoundation.framework; sourceTree = SDKROOT; }; + 3A171A121874D95A00CF8D08 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 3A171A161874DC1D00CF8D08 /* SpriteKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SpriteKit.framework; path = System/Library/Frameworks/SpriteKit.framework; sourceTree = SDKROOT; }; + 3A171A1B1874DE9900CF8D08 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; + 3A171A1D18758E8600CF8D08 /* magic-wallpaper1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "magic-wallpaper1@2x.png"; sourceTree = ""; }; + 3A171A1E18758E8600CF8D08 /* magic-wallpaper2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "magic-wallpaper2@2x.png"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3A1719FC1874D77800CF8D08 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A171A131874D95A00CF8D08 /* UIKit.framework in Frameworks */, + 3A171A111874D95700CF8D08 /* Foundation.framework in Frameworks */, + 3A171A101874D95000CF8D08 /* SpringBoardFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3A1719C91874D75800CF8D08 = { + isa = PBXGroup; + children = ( + 3A171A021874D77800CF8D08 /* MagicWallpaper */, + 3A1719D41874D75800CF8D08 /* Frameworks */, + 3A1719D31874D75800CF8D08 /* Products */, + ); + sourceTree = ""; + }; + 3A1719D31874D75800CF8D08 /* Products */ = { + isa = PBXGroup; + children = ( + 3A1719FF1874D77800CF8D08 /* MagicWallpaper.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 3A1719D41874D75800CF8D08 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 3A171A1B1874DE9900CF8D08 /* CoreMotion.framework */, + 3A171A161874DC1D00CF8D08 /* SpriteKit.framework */, + 3A171A121874D95A00CF8D08 /* UIKit.framework */, + 3A171A0F1874D95000CF8D08 /* SpringBoardFoundation.framework */, + 3A1719D51874D75800CF8D08 /* Foundation.framework */, + 3A1719E31874D75800CF8D08 /* XCTest.framework */, + 3A1719E61874D75800CF8D08 /* UIKit.framework */, + 3A171A001874D77800CF8D08 /* CoreFoundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 3A171A021874D77800CF8D08 /* MagicWallpaper */ = { + isa = PBXGroup; + children = ( + 3A171A0C1874D7D400CF8D08 /* MagicWallpaper.h */, + 3A171A0D1874D7D400CF8D08 /* MagicWallpaper.m */, + 3A171A031874D77800CF8D08 /* Supporting Files */, + ); + path = MagicWallpaper; + sourceTree = ""; + }; + 3A171A031874D77800CF8D08 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 3A171A041874D77800CF8D08 /* Info.plist */, + 3A171A081874D77800CF8D08 /* Prefix.pch */, + 3A171A1D18758E8600CF8D08 /* magic-wallpaper1@2x.png */, + 3A171A1E18758E8600CF8D08 /* magic-wallpaper2@2x.png */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 3A1719FE1874D77800CF8D08 /* MagicWallpaper */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3A171A091874D77800CF8D08 /* Build configuration list for PBXNativeTarget "MagicWallpaper" */; + buildPhases = ( + 3A1719FB1874D77800CF8D08 /* Sources */, + 3A1719FC1874D77800CF8D08 /* Frameworks */, + 3A1719FD1874D77800CF8D08 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MagicWallpaper; + productName = MagicWallpaper; + productReference = 3A1719FF1874D77800CF8D08 /* MagicWallpaper.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3A1719CA1874D75800CF8D08 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + ORGANIZATIONNAME = Anton; + }; + buildConfigurationList = 3A1719CD1874D75800CF8D08 /* Build configuration list for PBXProject "ProceduralWallpaper" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 3A1719C91874D75800CF8D08; + productRefGroup = 3A1719D31874D75800CF8D08 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3A1719FE1874D77800CF8D08 /* MagicWallpaper */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3A1719FD1874D77800CF8D08 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A171A2018758E8600CF8D08 /* magic-wallpaper2@2x.png in Resources */, + 3A171A1F18758E8600CF8D08 /* magic-wallpaper1@2x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3A1719FB1874D77800CF8D08 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A171A0E1874D7D400CF8D08 /* MagicWallpaper.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 3A1719F31874D75800CF8D08 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 3A1719F41874D75800CF8D08 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 3A171A0A1874D77800CF8D08 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks"; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = MagicWallpaper/Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + ); + INFOPLIST_FILE = MagicWallpaper/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 3A171A0B1874D77800CF8D08 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks"; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = MagicWallpaper/Prefix.pch; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + ); + INFOPLIST_FILE = MagicWallpaper/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3A1719CD1874D75800CF8D08 /* Build configuration list for PBXProject "ProceduralWallpaper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A1719F31874D75800CF8D08 /* Debug */, + 3A1719F41874D75800CF8D08 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3A171A091874D77800CF8D08 /* Build configuration list for PBXNativeTarget "MagicWallpaper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A171A0A1874D77800CF8D08 /* Debug */, + 3A171A0B1874D77800CF8D08 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3A1719CA1874D75800CF8D08 /* Project object */; +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..2d421ba --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +ProceduralWallpaper +=================== + +A procedural wallpaper on iOS 7 consists of an instance conforming to the SBFProceduralWallpaper protocol, and a UIView to be presented on screen (they can be the same). + +The required methods are: + ++ `+identifier` ++ `+colorChangesSignificantly` ++ `+presetWallpaperOptions` ++ `-setWallpaperOptions:` ++ `-setWallpaperVariant:` ++ `-view` (if you subclass SBFProceduralWallpaper, it returns itself for you) ++ `-delegate` and `-setDelegate:` + +All classes available in a bundle are specified in an array with the key `SBProceduralWallpaperClassNames` in the bundle's Info.plist file. + + ++presetWallpaperOptions and -setWallpaperOptions: +-------------------------------------------------- + +`+presetWallpaperOptions` should return an array of dictionaries, each representing one variant of the wallpaper. Each dictionary must, at least, contain an image name for the key `kSBUIMagicWallpaperThumbnailNameKey`. + +`-setWallpaperOptions:` will be called after the procedural wallpaper has been created, and will contain the selected option dictionary from the `+presetWallpaperOptions` array. + + +Compiling and installing +------------------------ + +You need to have the header files for SpringBoardFoundation.framework and a jailbroken iPhone to build and install this wallpaper. The bundle should be copied to /System/Library/ProceduralWallpapers. + +![Screenshot](screenshot.png) \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..5dcea4101634ca1944f1d4989ff97b5b3f2bad4b GIT binary patch literal 19123 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 literal 0 HcmV?d00001