From b0ebfcd94b96359ccc7ac632add65527cb700e2b Mon Sep 17 00:00:00 2001 From: Natalia Terlecka Date: Fri, 20 Mar 2015 11:59:51 +0000 Subject: [PATCH] New property to determine if you want the user to be asked about camera permissions automatically or manually. --- camera.xcodeproj/project.pbxproj | 30 ++++++----- .../UserInterfaceState.xcuserstate | Bin 84894 -> 89129 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 18 ------- camera/Base.lproj/Main.storyboard | 37 +++++++++---- camera/CameraManager.swift | 51 ++++++++++++++---- camera/Info.plist | 2 +- camera/ViewController.swift | 50 +++++++++++++---- 7 files changed, 128 insertions(+), 60 deletions(-) diff --git a/camera.xcodeproj/project.pbxproj b/camera.xcodeproj/project.pbxproj index d1f6fa2..415fc61 100644 --- a/camera.xcodeproj/project.pbxproj +++ b/camera.xcodeproj/project.pbxproj @@ -202,8 +202,9 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer: Luis Diniz (HUX544ZBSL)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_ENTITLEMENTS[sdk=iphoneos*]" = ""; + CODE_SIGN_IDENTITY = "iPhone Developer: Natalia Terlecki (8B96NL57N3)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Natalia Terlecki (8B96NL57N3)"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -220,10 +221,10 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE = "4d0a483e-6fa4-454e-a019-6ce6d8c6f307"; + PROVISIONING_PROFILE = "c0db150a-581c-4aa9-bfc3-848f4eec3d08"; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; @@ -247,7 +248,8 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Distribution: IndexSquare LDA (QM7HJTY23M)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: IndexSquare LDA (QM7HJTY23M)"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -258,9 +260,9 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; - PROVISIONING_PROFILE = "4d0a483e-6fa4-454e-a019-6ce6d8c6f307"; + PROVISIONING_PROFILE = "3765a270-85d2-474b-9784-b02ccb687465"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -271,12 +273,13 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "iPhone Developer: Natalia Terlecki (8B96NL57N3)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Natalia Terlecki (8B96NL57N3)"; INFOPLIST_FILE = camera/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE = "c0db150a-581c-4aa9-bfc3-848f4eec3d08"; }; name = Debug; }; @@ -284,12 +287,13 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + CODE_SIGN_IDENTITY = "iPhone Distribution: IndexSquare LDA (QM7HJTY23M)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: IndexSquare LDA (QM7HJTY23M)"; INFOPLIST_FILE = camera/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE = "3765a270-85d2-474b-9784-b02ccb687465"; }; name = Release; }; diff --git a/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate b/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate index 04295fb3a677093e06e4fa44f025c2da4a72d112..bf1b732789658ac17076ef5a37d312ed6e0b1ae7 100644 GIT binary patch literal 89129 zcmdqK2YeI9^FDmLCtZ{7B-zvuz=RsW#=Ve`Alou1xMA6VX^LzMa4?o**$@IGx9Pq2 zN(Za7q^Tw&`@DGWMc{mm}x zQ4G%rOe!;g8OTgwGMOwUo5^8vnLH++DPRhjB4#Rc05gjzXDXOVri!U%W;1h{Ma*I* z$aFF*nN`dY%xdOHW(~8JIhr|^Ihi?yIh{G1IiIKjYu^$FdXHNo)q2#pbdF>{NCdJDn|I%UCa4&Q`HCY#lp~UBE7818ft!ls$}H!M3qs zb|t%-UCSQL9>X5bp2VKYp242Yp2uFuUcz3^u4gx~Ti9#a8`zuK+t@qVd)Rx~``L%s zN7*OXr`hM&7ulWcE9~p+TkN~+2kgh}XY7~kH|+Q9PwcPkAMD>2#==@Si)gW19F`Qz zK+6!zFv|$bD9aejc*{gfx+T++W68G^Sq`)uY$>*QEHf>$ER~komRieP%Y4fs%b}J= z%MweorNt7mv|BnYM_ATaj3(MD*?<_xBezE*+ z`OEUJ6u_tDb+mPyb${z*>lACYHP2dTJ-~X9)om@c&afV0 zt*};GebzbFdh0@~-`ZdeT9;XuTU)J%TRW_)tVdecSyk(?))TBJTTio|X+76^f%QV` zMb^u$8?0AZ@3h`!z1w<^b*puo^%-PZtWR2Bw7z8BVclunWqr%~w)Jc4H`Z^h z-&w!6{$Tyl`iu1s>pvXkIF9FRoRf2LDcru?aBc)Ql1t;paJgI_m(LY&gkh(DBX1|=_$&F1{8jul{Pp}z{H^>Q{N4OE{yzRe{t^Ch{we-h{sn#q|1$p?|0e$q|33c_ z|0(|k|26*||0Dkk|2zK||F3`rs~`wAK@nWS0AaAOk1$+F6GjW;g#Crd!W1D}$P)^M z1B8PFw@@m~5DpP4glfSj%n|B^g@Rvb5Q4%oVY$#M94>SStArzkb%H7!E1V#lESx5s zDV!smFI*&CDqJCK5H<@}3)cxZ3bzQi3wH@yh3&!v!o$L2!jr-?!t=sQ!Y<)e;SJ$! z;XUC);S=F=;Va==;RoSo;Wyz=;U5u+7LgYvQ5KzIsyIj-D()+e6!#OyiW9_1VuqL{ z=86U4RB@U(T`UpHM6XybR*5xYoj6ZiATAaIVw1R3JWO06wuxbJrMOyLD;_N#BOWiF zB%UgsA)YOsCtfICB3>@87dMGp#B0SH#GA$2#5=`%#Cyg2#fQX4#V5q4#plEq#hv0S z;_KpD;=AGp;>Y4=;+Nt#;`icD;;-T#;@=V@u@WbVl3j90Dbhe`h%`(ZA&rv8NaLl6 zQo58Ww&^yv z&0{OG9b%hhtFl$wYHfA4dfR;465CSSGF!9lFxzrli*1E%we3jT8rzAslWZs3PO)8J zyU=!#ZL{qv+ZNkxw%cuY*zUC5WxLyUkL^+0W46a_PuQNcJ!N~^_KfXS+iSMhZ6Dh{ zv3+X$%=WqM3)`2ruWY~Bez*N$=j^;)u#0xdZnN9%vVEw1ANw%-zV-?B{p}O&lk5fd zLVJ0(__B#6pod?6=$Rus>*j$o{bXdHW0Y7wvD^-?qPFf7kw={eAlf_7Cmf z+P|}ZZ~wvmkNsbnk&(>HHrXya<$dH4@<@5KJVu@%?=Kh0Q{@BX1LbM*LGrCVwt}E&nM0B>$|~6uTlTisDe5ic3jRQk4P9KxL3JSQ(-WRYogg zl(EVtUC_gGcDL*T}D8DMdDZeX!D1SPT13P$!!{Kze94U@e$1umfj%-JcBiE7V z$afSt3LQm`sg462vmE7)3P+`*%2Dl@?U?JB=UD9UJC-_@IocgzM~CA`$5D=>9mhLP zb)4|b$MK6u1Z&xtJ*csRqvYbYH&5Wnp{EGI@eLIqg|?txQ=lh>pISLyz2zliLO&! zXS>dEUF5phwaK;Fb(L$2>pItV*L|-0T@Sb(bUoyH*!76(QP=aX9j=|OS6y$o-gCY0 z`por}>pRy^uHRh0yZ(0llY&#&6h6h4Vow>6GB9OO%HWidDQPLAQYNKLNpYtXr&Oj? zrBtWPPMMpsFr^`-F{LTxu$1K~Eh%j&ho`isgi|_Fj!0RXvM%Mslv7hKPq`xHrj*-K zZco{o@>t5_DNm$4m-14|t0`}%yr1$x%7-bRrhJ+5Rm#^X->3YL@?*-cDZiy!Qmv_6 zDxWH(4oDrCIw*B;>X6hCsUuUzrcO-FPR&WpO+7GmTIxZmrKz6OLsDx}eW|sn3sV=R zE>2yN+LpR9bzLe+JwEm1)YDVXNIfU@!qiJsudEx>+S$^wlMxw-u`zbW!KBQs^kpm$ zt`5(KpOMIU&X~rQKsdaSkr_qBD!Y+!GA;MRi=yjAq6#W0`TxcxD2#KQob; z#7t%;t4u{eljFkuz=Pn`(z7Pkij%iBWDtsP-^V@LDKKu562 z@7$*}xFpco(&1@p?g+K}I^ffAS*X3PrabI-4lWHgbS_=m+`4pbb8Ay*RdH}xU}bZt zeW3;r^ffLEt_T9O{%1{RYiTgt(cBv7fDMS>nOPnPca(%yw6z4GscO0}33q^!^lHU{ zaIi_M*xa$YCfF8g2kkiwMe6N=2*YFKD{Bv|2>P0j3`Rv9QWILUHHMmk8DJf=nmaOL<;rk}!@-V{Ku4e@ zwAAk$-&4_Qy2I0}`<(@PN$vkR)$Jj=v-5SfQKfZnBBqSrIj*NRe4)P~6$v(iCj(E{_k)YIQ>>(B5R|w}z=@GBz+ib?64BPTg0X zxRaR&)3BbI&n#dT(uvprwy^+ywg+3lmR1H;MjfW^<9AjsX>JKloib%gT^Ous3K&|T zr5P-?y(QSVJTS!&F+8QY$~QJUGtkx+p3(>w(;hH>cvl3L2E!RgG{VFVc7%5@e&$dn zz%qdFjZBmN>%2-|mA0uida{IBK`mt|vy5qG4r7)xE$VP} zggR19Q%9-$ZDCrO5YxsS&a^XOb+kH09j8uGC#&hyOq@-@jzDt@*j`6_sHG*?4zn#B zgnqzO@pc4Pc$>hgo0l|0KcR3~8>n<@66pb$#|!iiXu91@K zuG0R3`Qt72mP9PBD)LoVqdPPQxQ;n$y*gIch02hHmA;D3jzB|8&=>63#Hh?MngZYt zqu<9dC(sc*ULC)IIZ>TJ`{M{6(H3ZJiU?l{nx(GwROYnx>i#vyI`TPQG=V@}pXtCCXd)Z(T+Cd;WUOCLElGFjmorzy zez1Yr%w%k2HZq&kDQeb6<|<~3nxh^RYkSvgc9!XP&f0T3Yh4n`&<<(L#(j&{Kz9EO z*{_*#iDt$XfmX2J_NXrl^?ORawN*8KpQqeYQtPd%^w09t`<-cV1?G5t-r{mk4V2Q0#AA5oRl6&F z5e$8d9%LTgz&xZDszqRiC1u5(txYXKFNoYVm~-^QD%}hoV;+ae?{04otlr2x#=zn< zaLt;`$!VGECa0~*%F2gdiwd&Vt<%w;VvgFtJgpu`4VRkQbIkMW)oD7?i_A-lqvoUm zZem`fkcNHiWL~9e+Qq!gyrLegPFLNVnAe!snK#s8wM6ywNlm@zpbvV~1%EH9CjIY^ zXvaQQOO1|wrgaP!tuAF06c$cSE66HZx6bI$SIl>`LtiuBFyE>(RIfT~6Z1Xu1M{O= zK@cJM?pRCzO*6!qe&->3YU$ugVfko-CCO~)e{1-M>@7p@YGjJ36@;}`%KgsSyU~k8 z6RNA7h+dHu*}=mj4)I7pB9f3ztyHVjYIU|+qx!ZW87attoXCYz)LOMp4X6zS9Zir* zO(;EPE!Nla>h>T+P@Un(BCdZ}LgP#$bTHO;{i_V!)0czi&j^D<>7c&d@0{ENbZwx0 zX)qExM355|_eEA4W7RAVHEMwy2$D!}zuuy@%7YV!FmGwt2v77NBUbQ8d9yHn=g_1e zhQjwnBVcJk!__$(&`5PIRimqPPOXo2eGYV8Tk^Dtf<`mXZ$x9zSaqJdSe<47OhA*E zl#OVAG*PWr=Wj%lQM$T7U8pWv1TbBzDlDq-H$|)nENyM>=%g{ws4iv4G}u*b^z`6# zhW?{Fn)6WZM!G^7jpw7Hn8v4~1603ysJf_n^z<_ewTgacimn8+X7moZ!4sfjwNWkF zg*>PX&0uV3Ci0>~(5!krHh^WZzN2{sMA?BAZ3~(ryAFs_)FoS5|~wMCscH)7ax4BOZ*>5xYa zZjK(K^<*Bpf)-N+`PCI_ks(h5YNqqE5jCM8T7s6MWooM$QrpzS)pj+!1s#T#!)^)w zMIp6=pd;xfDe~VsYFndAAovQj!B!+qv+Ohwzb)9_u{sT6rr^?0dvg%x!%$4jqM#Mk*rc7<4Q;4jqq9KqsP;(8=f&bSgRxosP~xXQH#v+2|Z}E;8u0U6!^=Jdyh&G|k=qj`YU5&0m*P`pt_2>q4Bf1IQjBY`< zqTA5z=nixzx(nTn?m=78HgqrAj_yPEqX*D~=ppnldIUX+9z&0#C(x7VDfBdY20e?O zL(iiZ(2M9Lv;*x#yU@$%74#~44ZV)uKyRYA(A(%8^e%c2y^lUXAEJ-Y$LJIEDf$e3 zj=n%&qOZ``=o|Dc`VM`Men3B>pU}_f7xXLo4gHS(K!2jY(BJ4E^e<*G!WgsIf~}at zJQlEsC2YfXEMo;buoJs*3QolX@IX8W55`0AP`nQwhWEw8@d!K;r{Pg}KRgMj@`Hzm*7(D z!DV;`o{7Eq5IhT);|g4ft8g`*jcc$E*Wx-n2hYXxa6O)n7vP0>5nhb__)r|c4Y(0E z;UHdum*Qo(86Sq1;}*OEx8e|P!-wN`9L62E6R*Up@DX@5J`%6NYt>G5m3oA_T0K%- zqpnrgsYj_ttEx)WW7K2SV4|{>I3S7>O<Lco->SOBT>J#dd>Qm~| z>ND!I>T~Mz>I>?N>PzYlb*H*ZeOY})eN}x;eO-M+eN%l)eOrA;eOG-?eP8`R{ZRc# z{aF1({Z#!-{apP*{Zjo({aXD-{Z{=>{a*b+{Zai%{aO7*{Z;)<{ayV-{Zsu*{agJ< z{g)tyAea!CAeJBtK~{n|f_Q=if<%HOf@}oY36cp?2yzhQBnVDfQV2>VXaGS22^vJu zV1kAaG?buy2pUGvz61>?Xaqqc2}&bq6hZqDG@76>1dSzV96{p=nn2M01WhDp5 z5L8N#hoCZoW)L)!ATL3O5HyRRa)KZNtR$$4plX6<6I4TxkDywD>Ij-c&|HG%5mZmm ze1aAbw2+`h1T7}WPtc(R1qf;&sF9#1f`SAsA!sQ<%Lr;F=rDqo6VyV`3W8b*3K7&s z(BTBN6BH&0oNXsTD+yXf&=CZ!rlGkFAB|N^>S1Re?r4VqLS5;1jzn&HKivU4-_G`6 zcUW!)KaUn1iu5HXx(=>g>#MIY3vgkQVpYY5n2TLPi;YcyHq%{0#e{uZRYkSWU+S$f zx^_9OG9pr?s*UcqLG{IT-ttoa9CwY^U0ECL)p}ZXSog9sN=p25JT-L7XMk>^1t)Yb zSn4URo8k9XQcbzFU8eqZ6V*TEinrpH|h9rTyg zR8{z?YHBH7XX|9c{4MT|3hd^j=zXOt+d7BInxMZcPt9-Sfwh|9CR5`<_^9rrAPfQ({D7DmrVpQ^a@^Uc> zd5e}Ckr0on!%s)VX!~7Sc0f$oQW!Rq7yW>i7#dT;kj`vjAJbxEV~SO{OR9YH{3dPH zx@%^5qLcr#cx2x!Z#B#kt@DP6U(#Y@Vvse%GRkQ#Qk&OCjc;g;Aqi^uYU|6R2KzlN zH9Dr0E*}7vdggfP%yn0IyJq`Ov_h<*`8?Hb%~NR-8SVc{3yzOL_EyiVs`ONW=jpPY zSZ(~Fqt6Pqw+36%V877W5?s3$1`H;%ztUY1mHTg6a9@6x@&f^DYWSLuA;D<%mTMp>h;0; zU+?o*xGQIr!;n)I8dZ+_|NpV%V z?%9kn8bb>Y>cXb-`oRU)dMl%V<7t_3U1g~9{BymvGyPy_m8I^QQa=oA4MZGWx|>Mr z4D6}{ZeXUr%3oVw9feJ&MFw;gsj30n(cG>fTqZ5Cuc?H#RzX{}RaNEYC56qQB~A9I zuWIF`F@^GJA(I}d(mmClN?2e^>b2k|ru8CP++@DdfTY6hgTeGe07uW#={jKud?2l2 z(k2*$rYsOSYE=i*G9$V=HOu3vhGo<{hpv7!%BZP~mMx}b3%bgJ#Ix(Fpj^a$!IRd} z6-W;(=*$9Pz^nnSYZ`heNNl%j>ME(*hD!q)(P}|Lw9T2_Won)zt=4Mu-w(XuAB z8~u$@dnGM2w5t<7&{|}yO|b?$yPKGGl|346Z8y}p?iwv1={DwbX)%+wL4&4otd1GI z`Fh#v0Ng{;`*IqERnR#NVHAWq=74}*M9Ypvrm{3xtoQ3tm$wr9P<4H5l|yNj40Dx| z8V?QW`p5=ACC0ZJ|XcnTvKwtz8?HYSDEmm{cwJj%WzUhG@l6 z=894MSI?S3L1ML-cmJKVXpBy}L^4mxBWSr8y?2$<{RDJ15|BZ7 z9%H*}Xx-6f=}mR(YOCvD{%czzLr+Kb&{#|}+W2XEk2IHuQKMVA$RscaNbCi)@Q_4>%}eXWwA7fG zQre{|ZPpK~VEh1IMr*`qr@F2fc8Og(&G?R9N$X57w?ZRDm?WC%8|}a0<(E)q##>^bDqaE)8uWKE4hjlUPT84Xre`Tcxhq zmS}Cbo>tkfTNQnTjdth&M=km$T7Go5@_MXLpRmHMw8F@46>2>56BfRM7Cx|BVb45m z<6r8B1Cu&9*??%w)Dyq2t{6^Gv=zt{t=ydmDY8%RAJR68)O{p0-S?oT`)H+9RI4Rk z!Ln29fqVU#uuU|^_d!}9+f;xq9DZ%93JVhr{vaTL#lY=@Fca#QxxM9euy7gmAEEWf zpvX#=6`lGpUp)kG6$bLlwCt$la%hKXU7^%#wD`f0lGYMTD=(i@k(Qs4 znU=)R)!hBc&Y2*Y00PX|a9zCWo zI`R$$%j;b-dg4c&4>(OY(R7NBM(&+=H z9TmZJn*jk0L>X0c>2Y#&0KcPneK0LLfSyV%o`W51rKcRs42-I(n!+2x{Yb$k_O3c= z!~XKxDx=;nv|di{^{5av9&l@#Et#Ud-zh+T-vD5=A-=AFaJLu^(C8(BcC63-MKRpH zW9XBts=C%&;hnD^(t>uimD?OO{7d1c^bSY+R0cacI17j#nOZQdT-dkDwKKshm-^gg zR4X7)bZjkFigIAzP>fA_LaVa~6e+uJNOhGpRd9M(UR70X=+n3gH+GTvS9~oKpr#SHwHMa8+-N6b5ZnQcY zX<8=J%JGXu!ph)#VS2)nRbAz!r}x^~RlUCi&f23BWlCT0AVP#G50eDKmB`^sX=ESZ z_kmS(1@o3{idWE!lDc3hB7`)t`#nn@1?g>g6V@#3OY;%kYPV!?0#R01853hz4xk|M z(>k6giMI?*H`I-!u@V z6e`{q8zRtXZqg(pf-9LfFZpDfL6MSA)&xkpp&66)5L!R^yfNyV7W|UxYS{agcwouv z3jHh<6eszxB*CeHV;Vz}YKkyFsd@oHzli`Rt}hHQQy_e)gr!^Cu~Ubr-?#ec(N)(T zQs2)#R?)@VY z!Pzf_VR1vTkOIapuO{P)0o0YLxke2Tj%6X3F;0^$eu{QbpT*PB%mPAuX>_%LV#OO9 zWU{ukhZ=+7u(m0TRE}&AG?^-VGkkDFZr}td&g?juy5Ufp1wRDg7`^3$EsN>23(Th0 z4|BDYno7juMJ;4mVg=3(w9{+xwCWIjN`fYs&=%+-4j?n(E{X1D%C!$*sz=e5Q?&S* z(F0nwrxda#yiv8aQiS-ZJTXG8wkwZ>7TRXqQ&Uq_6BXxh3N|ZFcM-5KOfz>&OIk}L z+Aw#rWTvNN7EPL{h0}Ui^kD}}PyLNS>7c-sy94YlhC?nG9XbwxS{m>4S5fTpeqifn zsEti&Rf%>zp$F$Q*f&dkBt?#&EXmbjLiSWt!{uRdRcXDUgLVCtGipI)kf5Ojaqbd& ztpm9#pkb4CRf-%xb&|^&MTQulv}&#);jt9QvwNB>h6^t$S?no|GzwX|dy>*1Exzw(QpElky~%vM6*RF2yoQ!x6OVlk#rE|>+USte`%^ER ztjq^XqK>Ytt{iTK;BvHNmIvmSVGHN?SHsZ;^ch>@sjUO&XAZ+JqL4FoM`q(35waLy ze$Iq5{-|fUl!Dgo4yZ1t0bS<;#DKec5Bsm}VZhk*%_tlKNBe&rMedJ( zjrKn>DDQyL%eb5(wZFlOg zh5QrPR@Rmo=ChST@7AoZgX?m`S3zbggvL?J*-k;@{)Uu&f^nFc}XVV|gHXL_6^`C4gEU-UA`E@Y5JPL&(P{;BL*Ax=IbO++7?!-M2hR z(fYICnRKY3(VVghSTmw$OV8}7e2~Lj7oE?~@2UE<3}Z+uFx2-F1&lv|F&T|%W33rC zY@lEXraK;(Kl+u1DO%puYj-ugsM_dmbdI;CwhoRRy5J1yUhSK7QM8#}NL=m$G;Aem z(Qi<^9xXanI(<3xR_b}=Rb^$6Cs9=fXU!!w#_7A|ZHgIxG|__w;d~-Z{ z$(BzjaF6j;GGJX$!ymhAtLQxv!~$?lUfXrSYx#W78ZZSJ6d3NV;qVj!C2v&YU-eHl zQ9IL5QuOr;j#ag6_u8tGD&v;W@+}3P*OTjvQB4%MqOQEwTMf%$*VbDL7xh#z{b}*4 zsBigUxAkM%J4VMs+nwr*pS7XN)9YH;$$3lR;-!RM6vB$rb;4$qX#=GiIShU7 zl(NHgU4f;iMW4?B+wj!FVT-%Giaya2N!f(N9xsH%<`gEYlOoRCUBq%XoZrv%R?vGQ zQ_7Pym7-4VC#rsTXTB`64x%{u{ltMSF{IQRUeh|1VifcfgH8(5DW7#;3Q`}Xu+bmy zg=@zy(wch1{ z0bBQ@c<$Z9OE4T`Dcpg(2N$z3vQD5#({>N3+xSkRPzUWERQF-dpjflxvF3S;lZJ)LJQqW}l`fD^5`G0oi? zXjy$E_y#y?r@sQ3nSQ6RdhJ@ce4#5h&1BNDH{hWScX>UW<3&OPtCu2G^#Lg%3cV?# zk{Pg?vxz=-X)UMV)Ak75kh6+HmBvG932LAOZ#djZuTXR`jb1{W=q}ZsI;6jV`|C;{ zwAN6>;(jAmcq*!D>LFySgf+;No@A|~c)9(?n^9t%pIYZ7kx1_w3~w}0NRI|n(Vl7n zmAe*Vc;lYOx`5(&;w9=kUZt<3Oq+nlFf68!3CyMMkovB`*f5#THmv~)K4VYhg)K&e zFehASQ>$j}3{#6n5So!9r>x z72ZQ1YNqib+%tMg_1gubm6fy=csjqk2aOtX?|Lz}0?&R{&xMC@x+1I9w1Miq)t@6 zCRwkrUKzuTXx(Vt6#Kyz>y1FEWWCyYjrCgVb=K>xHvnl6LB|qw96`qubOJ#qZn55E zz1ez;^;YX`*4qg>iJ+4SI+vjJ1m8*UUH>up*`ydXMTn+M%t_VDfIl=!PWB&jpCy7f zNZ!m8UlAs@UK!A=_gNnR1~lva1f8)NrbUHz2Y_vXSeV(8*2|8l-T2$eg1t8a@4#lQi}- zqwqV{kExNpYkkl9zV!p^ht`h>I**|93A%uw3kkZ2po_OyKe2vl{mlBg^$Y8l1YJVV zr376@(B%YOLC}>{EfGu5b_M292R^LEmJqOdQF5&Ctl;YG450NKlAD)Xk_8ORSw)`0 zY)^JxW@brYR#8@7^sC&=q+jKDl7Cei|JAtVNet50Ncmo?DGxKqrLlEce=@U~T7R|v z7CR&VwEh+Q!M_|6^8v?l7X5=cI$@>;%L&ZG8#s}m4JJZ4&d$l4LYaX!6SRq-jT&cM ze~5LH^O437$8Fo5eyHoLGa>`drE-HQaolWfAU8+_0->u2+Omlo!VTqsH|c7Et|91J zb>bX-#=wJOChf%%p+(tp;KAUeg(8e{x*A4NHS9;wby3Ns$DYpMB}rA$J{22%d7$m9CP zW!E#soUXA0U{T|MY3jD1skoU7m}xhk%jo6Xg5KCYIlP)wxJIst3vx@i zrQ9;EnLCVI&b4qWxK=L2wQ+}Y?Od4a;5xaL+$!z}ZZ&r#w}xBGt>cd3j^sGUb0=^oawl;obEj~pa;I^pb7yd8a%XX8bLVj9a_4d9a~E(Iau;zIbC+Gc8}~c+2lprU7xy>!5BD$6@QBAe%UgIW&+$Aj z@FFkqHr~$5yuv$pC-34@_*8xXKad~959WvPL-~F9Vf?=QaDD_ol27AD@%!zT~pTp!}c7pCB2-dm>2!gflA%Y$z=n;Y*CFn7NU|D;D zpeG4>ilC=tY8FB4`IeI|i^ff`>5cDlU-x2gZ zK|c`mBSAkA^fN)f5cDfSzY+91L4OeRCqaJ^^fy8O5cDs>48e$COfXBZgL7|62Uft?F7pND+D_Tb`tC&IECO;f(H;hkl;ZC4<>jB!9xk&hu~oZ?@RD-f=3WM zlHfFgM-jXq!J`QtL-1IF#}Pc9;0XlpPw+&7ClNfE;B?63A;5vfm5ImRQc?8!JJfGkN1TQ3b5y6WI_7i+4!2yCB z2yP^}iQpi?O9);{@G^p%2|kSAnYE!N(AMEWyVSd_2J?5PTxRClP!y!KV;>D#51_d^*8r z5PT-VXAyih!RHWsF2Uy!d_KV!5PTuQ7ZH3h!IuzxDZ!T!d^y2a5PT)U>j~aK@J50+ z5xkk;s|emg@YMugL-4f(Uq|ru1m8gLjRfCB@XZ9@Lh!8w-$wB51m6+$q`a2<-#hD_ z_COo2CHnVBWyfnd{Jl`w@miXGKd9_@E#JNmRCc_UQQs?-9k1ofCnyH{IultGuVuma zi^`7IQr-JTWyfo&?0ulJBwzEzi@$ zF_nmFj(?20dJ|Vy?^JWVmY`{(V2e~qNHxc6xtD#Sn&Y*^%6?MK@mlg^4^(r!mJPW( zRCBzR`Dp4VWj)h~_>5y+^H^(Xjib7_y5dWkspfbsW6^}&6Jr;zB_*23(GpP2@mhvq z|ET78EqSmJXRCBzR9cMD% zD4j)8sySZEeKTnjp5W3RBs5XY@meyQiTtbwsySZEQ!D5id62l@RC9ush8ElH9;oI7 zEv3vPUzc}_qnZ=6+%S{cjsBXi0R%0{t5>QyK}*##iPyPqMl~mB`8qLH(WQYdp(25cpe5(Tkg4@bH796kIQ^uW6SVZ2 zzEjN!S`JMgspbSNJ*GFRIYCQ$=?~SMpe4D)Xs1`IIYCQg=`YospyjH>Ooe1rbApz6 z(w*R}7pgfy%Pi>^)tsQEjr5&rPSA2f`av}(Xz3n(q?!}71dhEyH795}8{Ls2>oTpniI~W#p9U=;!-s9EWVzp=7bCT1=cgwoNx&R+aszu;c^NQ|EOJD z=jhWc(HJTj)ts=NqQ%oZBt$dVhhnJagiRD7{@JyJ2vK>GQ_Trm`q95$spf=h`yn0O z)YWLD3-l?dgj93F4HT~rrbV?MVFXD^H7DFm!Qv@>;#Aj-YEHO~*4qQBIpIzUkbv-u zzDC2$#YlURglbN>hhoG(%N-}YKFJbMp_$2xg?lMnJcCsn92KcM)tqoYt-PmHbHYOu zC7zThp$G{G;)F+O{XWc0T_f5vJP8Q+3~%}bMN2R<6O*#(5poPAoA5M6h<_%sq(_8A z1aZQ16e)qdBt|m!c(KyFn7BU%zfbQ3al%fDu-gQ2!Yj0T{P1=YASq{+@H(yE8-rLP zf;izVT64Du;)Hi;)p!DxSfRDUiyjH$gbyfA{Pc>&i8!q81aZR0v~s+QPguDR1aZP= zeZhmcu8#z9!j}|p4+-LgZzxD_!<%q__kCZQkLWfTL7eat1&N>T33Z&1AWry|BE+vI zu?X=5al#+8-d-Vy6aJ=9@gBzz0iG=|J;&Y?L7d1?q~wz|0a6S>oXFDp$>)tx-?U68 zB#09^ij#a;lHiyK;zW@m%#VA#)TEQWLJ%j~X*+vN5GOh)%w8af6H_Qq{L{duen+1( z=@UVmIFJIyFR#e}^;I?*L7X^*qU{}mIB^)oiZ`}y#BLD}5P2$F%jb?Ih!aOpod1j< zP8^k3ff0^`eiFoqV<=ku%;*8F8$p~no+8A@(uomzA&3(vQm`KR6?TsxPE4o3Jw8~S z3|Qx_Fg@hooe4wCq}cr-aMF#M23YYiX1;#OneyKq&6YP5yXl4{gspYRZYrX z2;#&diX1<6lFJ!Ijv52QFf(itT0Z(@Qt@n8zsBN0e)NO&CGM~U#_x!1(vJ&-gp zL7eEJkp1DyF%5P?f;e#|MeL8!n-L90k;DXX;w*~YBbz`sy+((;i*%_cf;h3VzZ#A< zpwHNNf;e$Dh3t`nBbm%m`ja?>6gK`)A-PISb{9_&Cmy30ey<4+BIYFG*NkQY|;^ZbC zwVcERapDmautz$rZobK6JV^-R#5H>$q{hHzggTMaEb%A`xLflj0YRKdC|Z9OJd+MJ z@wyYliO21!d}e|;@x(nyF3%q(Hh!aomwY#wtY&{ahiD&gq zy67PELJ%jOOYwTN=ve9W<*-MBIPn6C8GkgPn2oJzw&`!rN=y(Z zUPfVi+`uG*?U^7>ypjU<7;hy5*7m4TUaMpTapJ~3Yrqs_BqoRxuj-#_qIT9BL7aFE z1@0@sn29*OUj%XD^}DSf)7~*U7V!je;!U)H9@nXu5svDoCxSTfRtnnVjw&%|a)LPV z4hq@h(ia11nmJnU;|Su!yD4B_$1foAP4u{> zGbum0t`ZT%iH}h1zPgx%*gX@(iI39;_9j7`_!LFl+XQjqvlMmD3F5>TD9)Y{#ECm7 z#vT&Hi7!)-|C}IBe2q4<_Xy&|H!0p;BZw2

TVHAWnRrBJCA|IPoJ2wRZ^O#7`;K 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 Iuf*X02P7;Yp8x;= delta 33715 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 EFDwj%{{R30 diff --git a/camera.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/camera.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index fe8b822..fe2b454 100644 --- a/camera.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/camera.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -2,22 +2,4 @@ - - - - - - diff --git a/camera/Base.lproj/Main.storyboard b/camera/Base.lproj/Main.storyboard index 34384f8..d7ee9af 100644 --- a/camera/Base.lproj/Main.storyboard +++ b/camera/Base.lproj/Main.storyboard @@ -1,7 +1,6 @@ - @@ -22,9 +21,6 @@ - + + - + - - + - + + + + + + + + - diff --git a/camera/CameraManager.swift b/camera/CameraManager.swift index 454f36d..52d9613 100644 --- a/camera/CameraManager.swift +++ b/camera/CameraManager.swift @@ -37,10 +37,13 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { /// Capture session to customize camera settings. public var captureSession: AVCaptureSession? - + /// Property to determine if the manager should show the error for the user. If you want to show the errors yourself set this to false. If you want to add custom error UI set showErrorBlock property. Default value is true. public var showErrorsToUsers = true - + + /// Property to determine if the manager should show the camera permission popup immediatly when it's needed or you want to show it manually. Default value is true. + public var showAccessPermissionPopupAutomatically = true + /// A block creating UI to present error message to the user. public var showErrorBlock:(erTitle: String, erMessage: String) -> Void = { (erTitle: String, erMessage: String) -> Void in UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() @@ -59,7 +62,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } } return false - }() + }() /// Property to change camera device between front and back. public var cameraDevice: CameraDevice { @@ -197,7 +200,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } return NSURL(fileURLWithPath: tempPath!)! }() - + /// CameraManager singleton instance to use the camera. public class var sharedInstance: CameraManager { return _singletonSharedInstance @@ -214,7 +217,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { :param: view The view you want to add the preview layer to :param: cameraOutputMode The mode you want capturesession to run image / video / video and microphone - :returns: Current state of the camera: Ready / AccessDenied / NoDeviceFound. + :returns: Current state of the camera: Ready / AccessDenied / NoDeviceFound / NotDetermined. */ public func addPreviewLayerToView(view: UIView) -> CameraState { @@ -222,8 +225,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } public func addPreviewLayerToView(view: UIView, newCameraOutputMode: CameraOutputMode) -> CameraState { - let currentCameraState = _checkIfCameraIsAvailable() - if currentCameraState == .Ready || currentCameraState == .NotDetermined { + if self._canLoadCamera() { if let validEmbedingView = self.embedingView? { if let validPreviewLayer = self.previewLayer? { validPreviewLayer.removeFromSuperlayer() @@ -239,7 +241,22 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { }) } } - return currentCameraState + return self._checkIfCameraIsAvailable() + } + + /** + Asks the user for camera permissions. Only works if the permissions are not yet determined. + + :param: completition Completition block with the result of permission request + */ + public func askUserForCameraPermissions(completition: Bool -> Void) + { + AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (alowedAccess) -> Void in + dispatch_sync(dispatch_get_main_queue(), { () -> Void in + completition(alowedAccess) + }) + }) + } /** @@ -262,7 +279,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { self._startFollowingDeviceOrientation() } } else { - if self._checkIfCameraIsAvailable() == .Ready || _checkIfCameraIsAvailable() == .NotDetermined { + if self._canLoadCamera() { if self.cameraIsSetup { self.stopAndRemoveCaptureSession() } @@ -364,6 +381,15 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } } + /** + Current camera status. + + :returns: Current state of the camera: Ready / AccessDenied / NoDeviceFound / NotDetermined + */ + public func currentCameraStatus() -> CameraState + { + return self._checkIfCameraIsAvailable() + } // PRAGMA MARK - AVCaptureFileOutputRecordingDelegate @@ -482,6 +508,12 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } } + private func _canLoadCamera() -> Bool + { + let currentCameraState = _checkIfCameraIsAvailable() + return currentCameraState == .Ready || (currentCameraState == .NotDetermined && self.showAccessPermissionPopupAutomatically) + } + private func _setupCamera(completition: Void -> Void) { self.captureSession = AVCaptureSession() @@ -541,7 +573,6 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { if userAgreedToUseIt { return .Ready } else if authorizationStatus == AVAuthorizationStatus.NotDetermined { - AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (alowedAccess) -> Void in }) return .NotDetermined } else { return .AccessDenied diff --git a/camera/Info.plist b/camera/Info.plist index 2586fbe..2691793 100644 --- a/camera/Info.plist +++ b/camera/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - + com.imaginarycloud.cameraManager166784567676879 CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/camera/ViewController.swift b/camera/ViewController.swift index c7ddf56..fd08fdd 100644 --- a/camera/ViewController.swift +++ b/camera/ViewController.swift @@ -17,25 +17,32 @@ class ViewController: UIViewController { // MARK: - @IBOutlets @IBOutlet weak var cameraView: UIView! - @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var cameraButton: UIButton! + @IBOutlet weak var askForPermissionsButton: UIButton! + @IBOutlet weak var askForPermissionsLabel: UILabel! // MARK: - UIViewController override func viewDidLoad() { super.viewDidLoad() - let currentCameraState = self.cameraManager.addPreviewLayerToView(self.cameraView, newCameraOutputMode: CameraOutputMode.VideoOnly) + + self.cameraManager.showAccessPermissionPopupAutomatically = false + + self.askForPermissionsButton.hidden = true + self.askForPermissionsLabel.hidden = true + + let currentCameraState = self.cameraManager.currentCameraStatus() + if currentCameraState == .AccessDenied { UIAlertView(title: "Camera access denied", message: "You need to go to settings app and grant acces to the camera device to use it.", delegate: nil, cancelButtonTitle: "OK").show() - } else if (currentCameraState == .NoDeviceFound) { + } else if currentCameraState == .NoDeviceFound { UIAlertView(title: "Camera unavailable", message: "The device does not have a camera.", delegate: nil, cancelButtonTitle: "OK").show() - } - - self.cameraManager.cameraDevice = .Front - self.imageView.hidden = true - CameraManager.sharedInstance.showErrorBlock = { (erTitle: String, erMessage: String) -> Void in - UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() + } else if currentCameraState == .NotDetermined { + self.askForPermissionsButton.hidden = false + self.askForPermissionsLabel.hidden = false + } else if (currentCameraState == .Ready) { + self.addCameraToView() } } @@ -53,6 +60,18 @@ class ViewController: UIViewController { self.cameraManager.stopCaptureSession() } + + // MARK: - ViewController + + private func addCameraToView() + { + self.cameraManager.addPreviewLayerToView(self.cameraView, newCameraOutputMode: CameraOutputMode.VideoWithMic) + self.cameraManager.cameraDevice = .Front + CameraManager.sharedInstance.showErrorBlock = { (erTitle: String, erMessage: String) -> Void in + UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() + } + } + // MARK: - @IBActions @IBAction func changeFlashMode(sender: UIButton) @@ -121,6 +140,19 @@ class ViewController: UIViewController { sender.setTitle("Back", forState: UIControlState.Normal) } } + + @IBAction func askForCameraPermissions(sender: UIButton) + { + self.cameraManager.askUserForCameraPermissions({ permissionGranted in + self.askForPermissionsButton.hidden = true + self.askForPermissionsLabel.hidden = true + self.askForPermissionsButton.alpha = 0 + self.askForPermissionsLabel.alpha = 0 + if permissionGranted { + self.addCameraToView() + } + }) + } }