diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/.DS_Store b/C02 - Documents (Take 2)/01 - UTI Utilities/.DS_Store
new file mode 100644
index 0000000..ffc7ebe
Binary files /dev/null and b/C02 - Documents (Take 2)/01 - UTI Utilities/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/ApacheMIMETypes.txt b/C02 - Documents (Take 2)/01 - UTI Utilities/ApacheMIMETypes.txt
new file mode 100644
index 0000000..911242d
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/ApacheMIMETypes.txt
@@ -0,0 +1,1590 @@
+# http://http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?revision=1301894&view=co
+#
+# This file maps Internet media types to unique file extension(s).
+# Although created for httpd, this file is used by many software systems
+# and has been placed in the public domain for unlimited redisribution.
+#
+# The table below contains both registered and (common) unregistered types.
+# A type that has no unique extension can be ignored -- they are listed
+# here to guide configurations toward known types and to make it easier to
+# identify "new" types. File extensions are also commonly used to indicate
+# content languages and encodings, so choose them carefully.
+#
+# Internet media types should be registered as described in RFC 4288.
+# The registry is at .
+#
+# MIME type (lowercased) Extensions
+# ============================================ ==========
+# application/1d-interleaved-parityfec
+# application/3gpp-ims+xml
+# application/activemessage
+application/andrew-inset ez
+# application/applefile
+application/applixware aw
+application/atom+xml atom
+application/atomcat+xml atomcat
+# application/atomicmail
+application/atomsvc+xml atomsvc
+# application/auth-policy+xml
+# application/batch-smtp
+# application/beep+xml
+# application/calendar+xml
+# application/cals-1840
+# application/ccmp+xml
+application/ccxml+xml ccxml
+application/cdmi-capability cdmia
+application/cdmi-container cdmic
+application/cdmi-domain cdmid
+application/cdmi-object cdmio
+application/cdmi-queue cdmiq
+# application/cea-2018+xml
+# application/cellml+xml
+# application/cfw
+# application/cnrp+xml
+# application/commonground
+# application/conference-info+xml
+# application/cpl+xml
+# application/csta+xml
+# application/cstadata+xml
+application/cu-seeme cu
+# application/cybercash
+application/davmount+xml davmount
+# application/dca-rft
+# application/dec-dx
+# application/dialog-info+xml
+# application/dicom
+# application/dns
+application/docbook+xml dbk
+# application/dskpp+xml
+application/dssc+der dssc
+application/dssc+xml xdssc
+# application/dvcs
+application/ecmascript ecma
+# application/edi-consent
+# application/edi-x12
+# application/edifact
+application/emma+xml emma
+# application/epp+xml
+application/epub+zip epub
+# application/eshop
+# application/example
+application/exi exi
+# application/fastinfoset
+# application/fastsoap
+# application/fits
+application/font-tdpfr pfr
+# application/framework-attributes+xml
+application/gml+xml gml
+application/gpx+xml gpx
+application/gxf gxf
+# application/h224
+# application/held+xml
+# application/http
+application/hyperstudio stk
+# application/ibe-key-request+xml
+# application/ibe-pkg-reply+xml
+# application/ibe-pp-data
+# application/iges
+# application/im-iscomposing+xml
+# application/index
+# application/index.cmd
+# application/index.obj
+# application/index.response
+# application/index.vnd
+application/inkml+xml ink inkml
+# application/iotp
+application/ipfix ipfix
+# application/ipp
+# application/isup
+application/java-archive jar
+application/java-serialized-object ser
+application/java-vm class
+application/javascript js
+application/json json
+application/jsonml+json jsonml
+# application/kpml-request+xml
+# application/kpml-response+xml
+application/lost+xml lostxml
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+# application/macwriteii
+application/mads+xml mads
+application/marc mrc
+application/marcxml+xml mrcx
+application/mathematica ma nb mb
+# application/mathml-content+xml
+# application/mathml-presentation+xml
+application/mathml+xml mathml
+# application/mbms-associated-procedure-description+xml
+# application/mbms-deregister+xml
+# application/mbms-envelope+xml
+# application/mbms-msk+xml
+# application/mbms-msk-response+xml
+# application/mbms-protection-description+xml
+# application/mbms-reception-report+xml
+# application/mbms-register+xml
+# application/mbms-register-response+xml
+# application/mbms-user-service-description+xml
+application/mbox mbox
+# application/media_control+xml
+application/mediaservercontrol+xml mscml
+application/metalink+xml metalink
+application/metalink4+xml meta4
+application/mets+xml mets
+# application/mikey
+application/mods+xml mods
+# application/moss-keys
+# application/moss-signature
+# application/mosskey-data
+# application/mosskey-request
+application/mp21 m21 mp21
+application/mp4 mp4s
+# application/mpeg4-generic
+# application/mpeg4-iod
+# application/mpeg4-iod-xmt
+# application/msc-ivr+xml
+# application/msc-mixer+xml
+application/msword doc dot
+application/mxf mxf
+# application/nasdata
+# application/news-checkgroups
+# application/news-groupinfo
+# application/news-transmission
+# application/nss
+# application/ocsp-request
+# application/ocsp-response
+application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy
+application/oda oda
+application/oebps-package+xml opf
+application/ogg ogx
+application/omdoc+xml omdoc
+application/onenote onetoc onetoc2 onetmp onepkg
+application/oxps oxps
+# application/parityfec
+application/patch-ops-error+xml xer
+application/pdf pdf
+application/pgp-encrypted pgp
+# application/pgp-keys
+application/pgp-signature asc sig
+application/pics-rules prf
+# application/pidf+xml
+# application/pidf-diff+xml
+application/pkcs10 p10
+application/pkcs7-mime p7m p7c
+application/pkcs7-signature p7s
+application/pkcs8 p8
+application/pkix-attr-cert ac
+application/pkix-cert cer
+application/pkix-crl crl
+application/pkix-pkipath pkipath
+application/pkixcmp pki
+application/pls+xml pls
+# application/poc-settings+xml
+application/postscript ai eps ps
+# application/prs.alvestrand.titrax-sheet
+application/prs.cww cww
+# application/prs.nprend
+# application/prs.plucker
+# application/prs.rdf-xml-crypt
+# application/prs.xsf+xml
+application/pskc+xml pskcxml
+# application/qsig
+application/rdf+xml rdf
+application/reginfo+xml rif
+application/relax-ng-compact-syntax rnc
+# application/remote-printing
+application/resource-lists+xml rl
+application/resource-lists-diff+xml rld
+# application/riscos
+# application/rlmi+xml
+application/rls-services+xml rs
+application/rpki-ghostbusters gbr
+application/rpki-manifest mft
+application/rpki-roa roa
+# application/rpki-updown
+application/rsd+xml rsd
+application/rss+xml rss
+application/rtf rtf
+# application/rtx
+# application/samlassertion+xml
+# application/samlmetadata+xml
+application/sbml+xml sbml
+application/scvp-cv-request scq
+application/scvp-cv-response scs
+application/scvp-vp-request spq
+application/scvp-vp-response spp
+application/sdp sdp
+# application/set-payment
+application/set-payment-initiation setpay
+# application/set-registration
+application/set-registration-initiation setreg
+# application/sgml
+# application/sgml-open-catalog
+application/shf+xml shf
+# application/sieve
+# application/simple-filter+xml
+# application/simple-message-summary
+# application/simplesymbolcontainer
+# application/slate
+# application/smil
+application/smil+xml smi smil
+# application/soap+fastinfoset
+# application/soap+xml
+application/sparql-query rq
+application/sparql-results+xml srx
+# application/spirits-event+xml
+application/srgs gram
+application/srgs+xml grxml
+application/sru+xml sru
+application/ssdl+xml ssdl
+application/ssml+xml ssml
+# application/tamp-apex-update
+# application/tamp-apex-update-confirm
+# application/tamp-community-update
+# application/tamp-community-update-confirm
+# application/tamp-error
+# application/tamp-sequence-adjust
+# application/tamp-sequence-adjust-confirm
+# application/tamp-status-query
+# application/tamp-status-response
+# application/tamp-update
+# application/tamp-update-confirm
+application/tei+xml tei teicorpus
+application/thraud+xml tfi
+# application/timestamp-query
+# application/timestamp-reply
+application/timestamped-data tsd
+# application/tve-trigger
+# application/ulpfec
+# application/vcard+xml
+# application/vemmi
+# application/vividence.scriptfile
+# application/vnd.3gpp.bsf+xml
+application/vnd.3gpp.pic-bw-large plb
+application/vnd.3gpp.pic-bw-small psb
+application/vnd.3gpp.pic-bw-var pvb
+# application/vnd.3gpp.sms
+# application/vnd.3gpp2.bcmcsinfo+xml
+# application/vnd.3gpp2.sms
+application/vnd.3gpp2.tcap tcap
+application/vnd.3m.post-it-notes pwn
+application/vnd.accpac.simply.aso aso
+application/vnd.accpac.simply.imp imp
+application/vnd.acucobol acu
+application/vnd.acucorp atc acutc
+application/vnd.adobe.air-application-installer-package+zip air
+application/vnd.adobe.formscentral.fcdt fcdt
+application/vnd.adobe.fxp fxp fxpl
+# application/vnd.adobe.partial-upload
+application/vnd.adobe.xdp+xml xdp
+application/vnd.adobe.xfdf xfdf
+# application/vnd.aether.imp
+# application/vnd.ah-barcode
+application/vnd.ahead.space ahead
+application/vnd.airzip.filesecure.azf azf
+application/vnd.airzip.filesecure.azs azs
+application/vnd.amazon.ebook azw
+application/vnd.americandynamics.acc acc
+application/vnd.amiga.ami ami
+# application/vnd.amundsen.maze+xml
+application/vnd.android.package-archive apk
+application/vnd.anser-web-certificate-issue-initiation cii
+application/vnd.anser-web-funds-transfer-initiation fti
+application/vnd.antix.game-component atx
+application/vnd.apple.installer+xml mpkg
+application/vnd.apple.mpegurl m3u8
+# application/vnd.arastra.swi
+application/vnd.aristanetworks.swi swi
+application/vnd.astraea-software.iota iota
+application/vnd.audiograph aep
+# application/vnd.autopackage
+# application/vnd.avistar+xml
+application/vnd.blueice.multipass mpm
+# application/vnd.bluetooth.ep.oob
+application/vnd.bmi bmi
+application/vnd.businessobjects rep
+# application/vnd.cab-jscript
+# application/vnd.canon-cpdl
+# application/vnd.canon-lips
+# application/vnd.cendio.thinlinc.clientconf
+application/vnd.chemdraw+xml cdxml
+application/vnd.chipnuts.karaoke-mmd mmd
+application/vnd.cinderella cdy
+# application/vnd.cirpack.isdn-ext
+application/vnd.claymore cla
+application/vnd.cloanto.rp9 rp9
+application/vnd.clonk.c4group c4g c4d c4f c4p c4u
+application/vnd.cluetrust.cartomobile-config c11amc
+application/vnd.cluetrust.cartomobile-config-pkg c11amz
+# application/vnd.collection+json
+# application/vnd.commerce-battelle
+application/vnd.commonspace csp
+application/vnd.contact.cmsg cdbcmsg
+application/vnd.cosmocaller cmc
+application/vnd.crick.clicker clkx
+application/vnd.crick.clicker.keyboard clkk
+application/vnd.crick.clicker.palette clkp
+application/vnd.crick.clicker.template clkt
+application/vnd.crick.clicker.wordbank clkw
+application/vnd.criticaltools.wbs+xml wbs
+application/vnd.ctc-posml pml
+# application/vnd.ctct.ws+xml
+# application/vnd.cups-pdf
+# application/vnd.cups-postscript
+application/vnd.cups-ppd ppd
+# application/vnd.cups-raster
+# application/vnd.cups-raw
+# application/vnd.curl
+application/vnd.curl.car car
+application/vnd.curl.pcurl pcurl
+# application/vnd.cybank
+application/vnd.dart dart
+application/vnd.data-vision.rdz rdz
+application/vnd.dece.data uvf uvvf uvd uvvd
+application/vnd.dece.ttml+xml uvt uvvt
+application/vnd.dece.unspecified uvx uvvx
+application/vnd.dece.zip uvz uvvz
+application/vnd.denovo.fcselayout-link fe_launch
+# application/vnd.dir-bi.plate-dl-nosuffix
+application/vnd.dna dna
+application/vnd.dolby.mlp mlp
+# application/vnd.dolby.mobile.1
+# application/vnd.dolby.mobile.2
+application/vnd.dpgraph dpg
+application/vnd.dreamfactory dfac
+application/vnd.ds-keypoint kpxx
+application/vnd.dvb.ait ait
+# application/vnd.dvb.dvbj
+# application/vnd.dvb.esgcontainer
+# application/vnd.dvb.ipdcdftnotifaccess
+# application/vnd.dvb.ipdcesgaccess
+# application/vnd.dvb.ipdcesgaccess2
+# application/vnd.dvb.ipdcesgpdd
+# application/vnd.dvb.ipdcroaming
+# application/vnd.dvb.iptv.alfec-base
+# application/vnd.dvb.iptv.alfec-enhancement
+# application/vnd.dvb.notif-aggregate-root+xml
+# application/vnd.dvb.notif-container+xml
+# application/vnd.dvb.notif-generic+xml
+# application/vnd.dvb.notif-ia-msglist+xml
+# application/vnd.dvb.notif-ia-registration-request+xml
+# application/vnd.dvb.notif-ia-registration-response+xml
+# application/vnd.dvb.notif-init+xml
+# application/vnd.dvb.pfr
+application/vnd.dvb.service svc
+# application/vnd.dxr
+application/vnd.dynageo geo
+# application/vnd.easykaraoke.cdgdownload
+# application/vnd.ecdis-update
+application/vnd.ecowin.chart mag
+# application/vnd.ecowin.filerequest
+# application/vnd.ecowin.fileupdate
+# application/vnd.ecowin.series
+# application/vnd.ecowin.seriesrequest
+# application/vnd.ecowin.seriesupdate
+# application/vnd.emclient.accessrequest+xml
+application/vnd.enliven nml
+# application/vnd.eprints.data+xml
+application/vnd.epson.esf esf
+application/vnd.epson.msf msf
+application/vnd.epson.quickanime qam
+application/vnd.epson.salt slt
+application/vnd.epson.ssf ssf
+# application/vnd.ericsson.quickcall
+application/vnd.eszigno3+xml es3 et3
+# application/vnd.etsi.aoc+xml
+# application/vnd.etsi.cug+xml
+# application/vnd.etsi.iptvcommand+xml
+# application/vnd.etsi.iptvdiscovery+xml
+# application/vnd.etsi.iptvprofile+xml
+# application/vnd.etsi.iptvsad-bc+xml
+# application/vnd.etsi.iptvsad-cod+xml
+# application/vnd.etsi.iptvsad-npvr+xml
+# application/vnd.etsi.iptvservice+xml
+# application/vnd.etsi.iptvsync+xml
+# application/vnd.etsi.iptvueprofile+xml
+# application/vnd.etsi.mcid+xml
+# application/vnd.etsi.overload-control-policy-dataset+xml
+# application/vnd.etsi.sci+xml
+# application/vnd.etsi.simservs+xml
+# application/vnd.etsi.tsl+xml
+# application/vnd.etsi.tsl.der
+# application/vnd.eudora.data
+application/vnd.ezpix-album ez2
+application/vnd.ezpix-package ez3
+# application/vnd.f-secure.mobile
+application/vnd.fdf fdf
+application/vnd.fdsn.mseed mseed
+application/vnd.fdsn.seed seed dataless
+# application/vnd.ffsns
+# application/vnd.fints
+application/vnd.flographit gph
+application/vnd.fluxtime.clip ftc
+# application/vnd.font-fontforge-sfd
+application/vnd.framemaker fm frame maker book
+application/vnd.frogans.fnc fnc
+application/vnd.frogans.ltf ltf
+application/vnd.fsc.weblaunch fsc
+application/vnd.fujitsu.oasys oas
+application/vnd.fujitsu.oasys2 oa2
+application/vnd.fujitsu.oasys3 oa3
+application/vnd.fujitsu.oasysgp fg5
+application/vnd.fujitsu.oasysprs bh2
+# application/vnd.fujixerox.art-ex
+# application/vnd.fujixerox.art4
+# application/vnd.fujixerox.hbpl
+application/vnd.fujixerox.ddd ddd
+application/vnd.fujixerox.docuworks xdw
+application/vnd.fujixerox.docuworks.binder xbd
+# application/vnd.fut-misnet
+application/vnd.fuzzysheet fzs
+application/vnd.genomatix.tuxedo txd
+# application/vnd.geocube+xml
+application/vnd.geogebra.file ggb
+application/vnd.geogebra.tool ggt
+application/vnd.geometry-explorer gex gre
+application/vnd.geonext gxt
+application/vnd.geoplan g2w
+application/vnd.geospace g3w
+# application/vnd.globalplatform.card-content-mgt
+# application/vnd.globalplatform.card-content-mgt-response
+application/vnd.gmx gmx
+application/vnd.google-earth.kml+xml kml
+application/vnd.google-earth.kmz kmz
+application/vnd.grafeq gqf gqs
+# application/vnd.gridmp
+application/vnd.groove-account gac
+application/vnd.groove-help ghf
+application/vnd.groove-identity-message gim
+application/vnd.groove-injector grv
+application/vnd.groove-tool-message gtm
+application/vnd.groove-tool-template tpl
+application/vnd.groove-vcard vcg
+# application/vnd.hal+json
+application/vnd.hal+xml hal
+application/vnd.handheld-entertainment+xml zmm
+application/vnd.hbci hbci
+# application/vnd.hcl-bireports
+application/vnd.hhe.lesson-player les
+application/vnd.hp-hpgl hpgl
+application/vnd.hp-hpid hpid
+application/vnd.hp-hps hps
+application/vnd.hp-jlyt jlt
+application/vnd.hp-pcl pcl
+application/vnd.hp-pclxl pclxl
+# application/vnd.httphone
+application/vnd.hydrostatix.sof-data sfd-hdstx
+# application/vnd.hzn-3d-crossword
+# application/vnd.ibm.afplinedata
+# application/vnd.ibm.electronic-media
+application/vnd.ibm.minipay mpy
+application/vnd.ibm.modcap afp listafp list3820
+application/vnd.ibm.rights-management irm
+application/vnd.ibm.secure-container sc
+application/vnd.iccprofile icc icm
+application/vnd.igloader igl
+application/vnd.immervision-ivp ivp
+application/vnd.immervision-ivu ivu
+# application/vnd.informedcontrol.rms+xml
+# application/vnd.informix-visionary
+# application/vnd.infotech.project
+# application/vnd.infotech.project+xml
+# application/vnd.innopath.wamp.notification
+application/vnd.insors.igm igm
+application/vnd.intercon.formnet xpw xpx
+application/vnd.intergeo i2g
+# application/vnd.intertrust.digibox
+# application/vnd.intertrust.nncp
+application/vnd.intu.qbo qbo
+application/vnd.intu.qfx qfx
+# application/vnd.iptc.g2.conceptitem+xml
+# application/vnd.iptc.g2.knowledgeitem+xml
+# application/vnd.iptc.g2.newsitem+xml
+# application/vnd.iptc.g2.newsmessage+xml
+# application/vnd.iptc.g2.packageitem+xml
+# application/vnd.iptc.g2.planningitem+xml
+application/vnd.ipunplugged.rcprofile rcprofile
+application/vnd.irepository.package+xml irp
+application/vnd.is-xpr xpr
+application/vnd.isac.fcs fcs
+application/vnd.jam jam
+# application/vnd.japannet-directory-service
+# application/vnd.japannet-jpnstore-wakeup
+# application/vnd.japannet-payment-wakeup
+# application/vnd.japannet-registration
+# application/vnd.japannet-registration-wakeup
+# application/vnd.japannet-setstore-wakeup
+# application/vnd.japannet-verification
+# application/vnd.japannet-verification-wakeup
+application/vnd.jcp.javame.midlet-rms rms
+application/vnd.jisp jisp
+application/vnd.joost.joda-archive joda
+application/vnd.kahootz ktz ktr
+application/vnd.kde.karbon karbon
+application/vnd.kde.kchart chrt
+application/vnd.kde.kformula kfo
+application/vnd.kde.kivio flw
+application/vnd.kde.kontour kon
+application/vnd.kde.kpresenter kpr kpt
+application/vnd.kde.kspread ksp
+application/vnd.kde.kword kwd kwt
+application/vnd.kenameaapp htke
+application/vnd.kidspiration kia
+application/vnd.kinar kne knp
+application/vnd.koan skp skd skt skm
+application/vnd.kodak-descriptor sse
+application/vnd.las.las+xml lasxml
+# application/vnd.liberty-request+xml
+application/vnd.llamagraphics.life-balance.desktop lbd
+application/vnd.llamagraphics.life-balance.exchange+xml lbe
+application/vnd.lotus-1-2-3 123
+application/vnd.lotus-approach apr
+application/vnd.lotus-freelance pre
+application/vnd.lotus-notes nsf
+application/vnd.lotus-organizer org
+application/vnd.lotus-screencam scm
+application/vnd.lotus-wordpro lwp
+application/vnd.macports.portpkg portpkg
+# application/vnd.marlin.drm.actiontoken+xml
+# application/vnd.marlin.drm.conftoken+xml
+# application/vnd.marlin.drm.license+xml
+# application/vnd.marlin.drm.mdcf
+application/vnd.mcd mcd
+application/vnd.medcalcdata mc1
+application/vnd.mediastation.cdkey cdkey
+# application/vnd.meridian-slingshot
+application/vnd.mfer mwf
+application/vnd.mfmp mfm
+application/vnd.micrografx.flo flo
+application/vnd.micrografx.igx igx
+application/vnd.mif mif
+# application/vnd.minisoft-hp3000-save
+# application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf daf
+application/vnd.mobius.dis dis
+application/vnd.mobius.mbk mbk
+application/vnd.mobius.mqy mqy
+application/vnd.mobius.msl msl
+application/vnd.mobius.plc plc
+application/vnd.mobius.txf txf
+application/vnd.mophun.application mpn
+application/vnd.mophun.certificate mpc
+# application/vnd.motorola.flexsuite
+# application/vnd.motorola.flexsuite.adsi
+# application/vnd.motorola.flexsuite.fis
+# application/vnd.motorola.flexsuite.gotap
+# application/vnd.motorola.flexsuite.kmr
+# application/vnd.motorola.flexsuite.ttc
+# application/vnd.motorola.flexsuite.wem
+# application/vnd.motorola.iprm
+application/vnd.mozilla.xul+xml xul
+application/vnd.ms-artgalry cil
+# application/vnd.ms-asf
+application/vnd.ms-cab-compressed cab
+# application/vnd.ms-color.iccprofile
+application/vnd.ms-excel xls xlm xla xlc xlt xlw
+application/vnd.ms-excel.addin.macroenabled.12 xlam
+application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb
+application/vnd.ms-excel.sheet.macroenabled.12 xlsm
+application/vnd.ms-excel.template.macroenabled.12 xltm
+application/vnd.ms-fontobject eot
+application/vnd.ms-htmlhelp chm
+application/vnd.ms-ims ims
+application/vnd.ms-lrm lrm
+# application/vnd.ms-office.activex+xml
+application/vnd.ms-officetheme thmx
+# application/vnd.ms-opentype
+# application/vnd.ms-package.obfuscated-opentype
+application/vnd.ms-pki.seccat cat
+application/vnd.ms-pki.stl stl
+# application/vnd.ms-playready.initiator+xml
+application/vnd.ms-powerpoint ppt pps pot
+application/vnd.ms-powerpoint.addin.macroenabled.12 ppam
+application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm
+application/vnd.ms-powerpoint.slide.macroenabled.12 sldm
+application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm
+application/vnd.ms-powerpoint.template.macroenabled.12 potm
+# application/vnd.ms-printing.printticket+xml
+application/vnd.ms-project mpp mpt
+# application/vnd.ms-tnef
+# application/vnd.ms-wmdrm.lic-chlg-req
+# application/vnd.ms-wmdrm.lic-resp
+# application/vnd.ms-wmdrm.meter-chlg-req
+# application/vnd.ms-wmdrm.meter-resp
+application/vnd.ms-word.document.macroenabled.12 docm
+application/vnd.ms-word.template.macroenabled.12 dotm
+application/vnd.ms-works wps wks wcm wdb
+application/vnd.ms-wpl wpl
+application/vnd.ms-xpsdocument xps
+application/vnd.mseq mseq
+# application/vnd.msign
+# application/vnd.multiad.creator
+# application/vnd.multiad.creator.cif
+# application/vnd.music-niff
+application/vnd.musician mus
+application/vnd.muvee.style msty
+application/vnd.mynfc taglet
+# application/vnd.ncd.control
+# application/vnd.ncd.reference
+# application/vnd.nervana
+# application/vnd.netfpx
+application/vnd.neurolanguage.nlu nlu
+application/vnd.nitf ntf nitf
+application/vnd.noblenet-directory nnd
+application/vnd.noblenet-sealer nns
+application/vnd.noblenet-web nnw
+# application/vnd.nokia.catalogs
+# application/vnd.nokia.conml+wbxml
+# application/vnd.nokia.conml+xml
+# application/vnd.nokia.isds-radio-presets
+# application/vnd.nokia.iptv.config+xml
+# application/vnd.nokia.landmark+wbxml
+# application/vnd.nokia.landmark+xml
+# application/vnd.nokia.landmarkcollection+xml
+# application/vnd.nokia.n-gage.ac+xml
+application/vnd.nokia.n-gage.data ngdat
+application/vnd.nokia.n-gage.symbian.install n-gage
+# application/vnd.nokia.ncd
+# application/vnd.nokia.pcd+wbxml
+# application/vnd.nokia.pcd+xml
+application/vnd.nokia.radio-preset rpst
+application/vnd.nokia.radio-presets rpss
+application/vnd.novadigm.edm edm
+application/vnd.novadigm.edx edx
+application/vnd.novadigm.ext ext
+# application/vnd.ntt-local.file-transfer
+# application/vnd.ntt-local.sip-ta_remote
+# application/vnd.ntt-local.sip-ta_tcp_stream
+application/vnd.oasis.opendocument.chart odc
+application/vnd.oasis.opendocument.chart-template otc
+application/vnd.oasis.opendocument.database odb
+application/vnd.oasis.opendocument.formula odf
+application/vnd.oasis.opendocument.formula-template odft
+application/vnd.oasis.opendocument.graphics odg
+application/vnd.oasis.opendocument.graphics-template otg
+application/vnd.oasis.opendocument.image odi
+application/vnd.oasis.opendocument.image-template oti
+application/vnd.oasis.opendocument.presentation odp
+application/vnd.oasis.opendocument.presentation-template otp
+application/vnd.oasis.opendocument.spreadsheet ods
+application/vnd.oasis.opendocument.spreadsheet-template ots
+application/vnd.oasis.opendocument.text odt
+application/vnd.oasis.opendocument.text-master odm
+application/vnd.oasis.opendocument.text-template ott
+application/vnd.oasis.opendocument.text-web oth
+# application/vnd.obn
+# application/vnd.oftn.l10n+json
+# application/vnd.oipf.contentaccessdownload+xml
+# application/vnd.oipf.contentaccessstreaming+xml
+# application/vnd.oipf.cspg-hexbinary
+# application/vnd.oipf.dae.svg+xml
+# application/vnd.oipf.dae.xhtml+xml
+# application/vnd.oipf.mippvcontrolmessage+xml
+# application/vnd.oipf.pae.gem
+# application/vnd.oipf.spdiscovery+xml
+# application/vnd.oipf.spdlist+xml
+# application/vnd.oipf.ueprofile+xml
+# application/vnd.oipf.userprofile+xml
+application/vnd.olpc-sugar xo
+# application/vnd.oma-scws-config
+# application/vnd.oma-scws-http-request
+# application/vnd.oma-scws-http-response
+# application/vnd.oma.bcast.associated-procedure-parameter+xml
+# application/vnd.oma.bcast.drm-trigger+xml
+# application/vnd.oma.bcast.imd+xml
+# application/vnd.oma.bcast.ltkm
+# application/vnd.oma.bcast.notification+xml
+# application/vnd.oma.bcast.provisioningtrigger
+# application/vnd.oma.bcast.sgboot
+# application/vnd.oma.bcast.sgdd+xml
+# application/vnd.oma.bcast.sgdu
+# application/vnd.oma.bcast.simple-symbol-container
+# application/vnd.oma.bcast.smartcard-trigger+xml
+# application/vnd.oma.bcast.sprov+xml
+# application/vnd.oma.bcast.stkm
+# application/vnd.oma.cab-address-book+xml
+# application/vnd.oma.cab-feature-handler+xml
+# application/vnd.oma.cab-pcc+xml
+# application/vnd.oma.cab-user-prefs+xml
+# application/vnd.oma.dcd
+# application/vnd.oma.dcdc
+application/vnd.oma.dd2+xml dd2
+# application/vnd.oma.drm.risd+xml
+# application/vnd.oma.group-usage-list+xml
+# application/vnd.oma.pal+xml
+# application/vnd.oma.poc.detailed-progress-report+xml
+# application/vnd.oma.poc.final-report+xml
+# application/vnd.oma.poc.groups+xml
+# application/vnd.oma.poc.invocation-descriptor+xml
+# application/vnd.oma.poc.optimized-progress-report+xml
+# application/vnd.oma.push
+# application/vnd.oma.scidm.messages+xml
+# application/vnd.oma.xcap-directory+xml
+# application/vnd.omads-email+xml
+# application/vnd.omads-file+xml
+# application/vnd.omads-folder+xml
+# application/vnd.omaloc-supl-init
+application/vnd.openofficeorg.extension oxt
+# application/vnd.openxmlformats-officedocument.custom-properties+xml
+# application/vnd.openxmlformats-officedocument.customxmlproperties+xml
+# application/vnd.openxmlformats-officedocument.drawing+xml
+# application/vnd.openxmlformats-officedocument.drawingml.chart+xml
+# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml
+# application/vnd.openxmlformats-officedocument.extended-properties+xml
+# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml
+# application/vnd.openxmlformats-officedocument.presentationml.comments+xml
+# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml
+# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml
+# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml
+application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
+# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml
+application/vnd.openxmlformats-officedocument.presentationml.slide sldx
+# application/vnd.openxmlformats-officedocument.presentationml.slide+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml
+application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
+# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml
+# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml
+# application/vnd.openxmlformats-officedocument.presentationml.tags+xml
+application/vnd.openxmlformats-officedocument.presentationml.template potx
+# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
+# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml
+# application/vnd.openxmlformats-officedocument.theme+xml
+# application/vnd.openxmlformats-officedocument.themeoverride+xml
+# application/vnd.openxmlformats-officedocument.vmldrawing
+# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
+# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
+# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml
+# application/vnd.openxmlformats-package.core-properties+xml
+# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml
+# application/vnd.openxmlformats-package.relationships+xml
+# application/vnd.quobject-quoxdocument
+# application/vnd.osa.netdeploy
+application/vnd.osgeo.mapguide.package mgp
+# application/vnd.osgi.bundle
+application/vnd.osgi.dp dp
+application/vnd.osgi.subsystem esa
+# application/vnd.otps.ct-kip+xml
+application/vnd.palm pdb pqa oprc
+# application/vnd.paos.xml
+application/vnd.pawaafile paw
+application/vnd.pg.format str
+application/vnd.pg.osasli ei6
+# application/vnd.piaccess.application-licence
+application/vnd.picsel efif
+application/vnd.pmi.widget wg
+# application/vnd.poc.group-advertisement+xml
+application/vnd.pocketlearn plf
+application/vnd.powerbuilder6 pbd
+# application/vnd.powerbuilder6-s
+# application/vnd.powerbuilder7
+# application/vnd.powerbuilder7-s
+# application/vnd.powerbuilder75
+# application/vnd.powerbuilder75-s
+# application/vnd.preminet
+application/vnd.previewsystems.box box
+application/vnd.proteus.magazine mgz
+application/vnd.publishare-delta-tree qps
+application/vnd.pvi.ptid1 ptid
+# application/vnd.pwg-multiplexed
+# application/vnd.pwg-xhtml-print+xml
+# application/vnd.qualcomm.brew-app-res
+application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb
+# application/vnd.radisys.moml+xml
+# application/vnd.radisys.msml+xml
+# application/vnd.radisys.msml-audit+xml
+# application/vnd.radisys.msml-audit-conf+xml
+# application/vnd.radisys.msml-audit-conn+xml
+# application/vnd.radisys.msml-audit-dialog+xml
+# application/vnd.radisys.msml-audit-stream+xml
+# application/vnd.radisys.msml-conf+xml
+# application/vnd.radisys.msml-dialog+xml
+# application/vnd.radisys.msml-dialog-base+xml
+# application/vnd.radisys.msml-dialog-fax-detect+xml
+# application/vnd.radisys.msml-dialog-fax-sendrecv+xml
+# application/vnd.radisys.msml-dialog-group+xml
+# application/vnd.radisys.msml-dialog-speech+xml
+# application/vnd.radisys.msml-dialog-transform+xml
+# application/vnd.rainstor.data
+# application/vnd.rapid
+application/vnd.realvnc.bed bed
+application/vnd.recordare.musicxml mxl
+application/vnd.recordare.musicxml+xml musicxml
+# application/vnd.renlearn.rlprint
+application/vnd.rig.cryptonote cryptonote
+application/vnd.rim.cod cod
+application/vnd.rn-realmedia rm
+application/vnd.rn-realmedia-vbr rmvb
+application/vnd.route66.link66+xml link66
+# application/vnd.rs-274x
+# application/vnd.ruckus.download
+# application/vnd.s3sms
+application/vnd.sailingtracker.track st
+# application/vnd.sbm.cid
+# application/vnd.sbm.mid2
+# application/vnd.scribus
+# application/vnd.sealed.3df
+# application/vnd.sealed.csf
+# application/vnd.sealed.doc
+# application/vnd.sealed.eml
+# application/vnd.sealed.mht
+# application/vnd.sealed.net
+# application/vnd.sealed.ppt
+# application/vnd.sealed.tiff
+# application/vnd.sealed.xls
+# application/vnd.sealedmedia.softseal.html
+# application/vnd.sealedmedia.softseal.pdf
+application/vnd.seemail see
+application/vnd.sema sema
+application/vnd.semd semd
+application/vnd.semf semf
+application/vnd.shana.informed.formdata ifm
+application/vnd.shana.informed.formtemplate itp
+application/vnd.shana.informed.interchange iif
+application/vnd.shana.informed.package ipk
+application/vnd.simtech-mindmapper twd twds
+application/vnd.smaf mmf
+# application/vnd.smart.notebook
+application/vnd.smart.teacher teacher
+# application/vnd.software602.filler.form+xml
+# application/vnd.software602.filler.form-xml-zip
+application/vnd.solent.sdkm+xml sdkm sdkd
+application/vnd.spotfire.dxp dxp
+application/vnd.spotfire.sfs sfs
+# application/vnd.sss-cod
+# application/vnd.sss-dtf
+# application/vnd.sss-ntf
+application/vnd.stardivision.calc sdc
+application/vnd.stardivision.draw sda
+application/vnd.stardivision.impress sdd
+application/vnd.stardivision.math smf
+application/vnd.stardivision.writer sdw vor
+application/vnd.stardivision.writer-global sgl
+application/vnd.stepmania.package smzip
+application/vnd.stepmania.stepchart sm
+# application/vnd.street-stream
+application/vnd.sun.xml.calc sxc
+application/vnd.sun.xml.calc.template stc
+application/vnd.sun.xml.draw sxd
+application/vnd.sun.xml.draw.template std
+application/vnd.sun.xml.impress sxi
+application/vnd.sun.xml.impress.template sti
+application/vnd.sun.xml.math sxm
+application/vnd.sun.xml.writer sxw
+application/vnd.sun.xml.writer.global sxg
+application/vnd.sun.xml.writer.template stw
+# application/vnd.sun.wadl+xml
+application/vnd.sus-calendar sus susp
+application/vnd.svd svd
+# application/vnd.swiftview-ics
+application/vnd.symbian.install sis sisx
+application/vnd.syncml+xml xsm
+application/vnd.syncml.dm+wbxml bdm
+application/vnd.syncml.dm+xml xdm
+# application/vnd.syncml.dm.notification
+# application/vnd.syncml.ds.notification
+application/vnd.tao.intent-module-archive tao
+application/vnd.tcpdump.pcap pcap cap dmp
+application/vnd.tmobile-livetv tmo
+application/vnd.trid.tpt tpt
+application/vnd.triscape.mxs mxs
+application/vnd.trueapp tra
+# application/vnd.truedoc
+# application/vnd.ubisoft.webplayer
+application/vnd.ufdl ufd ufdl
+application/vnd.uiq.theme utz
+application/vnd.umajin umj
+application/vnd.unity unityweb
+application/vnd.uoml+xml uoml
+# application/vnd.uplanet.alert
+# application/vnd.uplanet.alert-wbxml
+# application/vnd.uplanet.bearer-choice
+# application/vnd.uplanet.bearer-choice-wbxml
+# application/vnd.uplanet.cacheop
+# application/vnd.uplanet.cacheop-wbxml
+# application/vnd.uplanet.channel
+# application/vnd.uplanet.channel-wbxml
+# application/vnd.uplanet.list
+# application/vnd.uplanet.list-wbxml
+# application/vnd.uplanet.listcmd
+# application/vnd.uplanet.listcmd-wbxml
+# application/vnd.uplanet.signal
+application/vnd.vcx vcx
+# application/vnd.vd-study
+# application/vnd.vectorworks
+# application/vnd.verimatrix.vcas
+# application/vnd.vidsoft.vidconference
+application/vnd.visio vsd vst vss vsw
+application/vnd.visionary vis
+# application/vnd.vividence.scriptfile
+application/vnd.vsf vsf
+# application/vnd.wap.sic
+# application/vnd.wap.slc
+application/vnd.wap.wbxml wbxml
+application/vnd.wap.wmlc wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/vnd.webturbo wtb
+# application/vnd.wfa.wsc
+# application/vnd.wmc
+# application/vnd.wmf.bootstrap
+# application/vnd.wolfram.mathematica
+# application/vnd.wolfram.mathematica.package
+application/vnd.wolfram.player nbp
+application/vnd.wordperfect wpd
+application/vnd.wqd wqd
+# application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf stf
+# application/vnd.wv.csp+wbxml
+# application/vnd.wv.csp+xml
+# application/vnd.wv.ssp+xml
+application/vnd.xara xar
+application/vnd.xfdl xfdl
+# application/vnd.xfdl.webform
+# application/vnd.xmi+xml
+# application/vnd.xmpie.cpkg
+# application/vnd.xmpie.dpkg
+# application/vnd.xmpie.plan
+# application/vnd.xmpie.ppkg
+# application/vnd.xmpie.xlim
+application/vnd.yamaha.hv-dic hvd
+application/vnd.yamaha.hv-script hvs
+application/vnd.yamaha.hv-voice hvp
+application/vnd.yamaha.openscoreformat osf
+application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg
+# application/vnd.yamaha.remote-setup
+application/vnd.yamaha.smaf-audio saf
+application/vnd.yamaha.smaf-phrase spf
+# application/vnd.yamaha.through-ngn
+# application/vnd.yamaha.tunnel-udpencap
+application/vnd.yellowriver-custom-menu cmp
+application/vnd.zul zir zirz
+application/vnd.zzazz.deck+xml zaz
+application/voicexml+xml vxml
+# application/vq-rtcpxr
+# application/watcherinfo+xml
+# application/whoispp-query
+# application/whoispp-response
+application/widget wgt
+application/winhlp hlp
+# application/wita
+# application/wordperfect5.1
+application/wsdl+xml wsdl
+application/wspolicy+xml wspolicy
+application/x-7z-compressed 7z
+application/x-abiword abw
+application/x-ace-compressed ace
+# application/x-amf
+application/x-apple-diskimage dmg
+application/x-authorware-bin aab x32 u32 vox
+application/x-authorware-map aam
+application/x-authorware-seg aas
+application/x-bcpio bcpio
+application/x-bittorrent torrent
+application/x-blorb blb blorb
+application/x-bzip bz
+application/x-bzip2 bz2 boz
+application/x-cbr cbr cba cbt cbz cb7
+application/x-cdlink vcd
+application/x-cfs-compressed cfs
+application/x-chat chat
+application/x-chess-pgn pgn
+application/x-conference nsc
+# application/x-compress
+application/x-cpio cpio
+application/x-csh csh
+application/x-debian-package deb udeb
+application/x-dgc-compressed dgc
+application/x-director dir dcr dxr cst cct cxt w3d fgd swa
+application/x-doom wad
+application/x-dtbncx+xml ncx
+application/x-dtbook+xml dtb
+application/x-dtbresource+xml res
+application/x-dvi dvi
+application/x-envoy evy
+application/x-eva eva
+application/x-font-bdf bdf
+# application/x-font-dos
+# application/x-font-framemaker
+application/x-font-ghostscript gsf
+# application/x-font-libgrx
+application/x-font-linux-psf psf
+application/x-font-otf otf
+application/x-font-pcf pcf
+application/x-font-snf snf
+# application/x-font-speedo
+# application/x-font-sunos-news
+application/x-font-ttf ttf ttc
+application/x-font-type1 pfa pfb pfm afm
+application/x-font-woff woff
+# application/x-font-vfont
+application/x-freearc arc
+application/x-futuresplash spl
+application/x-gca-compressed gca
+application/x-glulx ulx
+application/x-gnumeric gnumeric
+application/x-gramps-xml gramps
+application/x-gtar gtar
+# application/x-gzip
+application/x-hdf hdf
+application/x-install-instructions install
+application/x-iso9660-image iso
+application/x-java-jnlp-file jnlp
+application/x-latex latex
+application/x-lzh-compressed lzh lha
+application/x-mie mie
+application/x-mobipocket-ebook prc mobi
+application/x-ms-application application
+application/x-ms-shortcut lnk
+application/x-ms-wmd wmd
+application/x-ms-wmz wmz
+application/x-ms-xbap xbap
+application/x-msaccess mdb
+application/x-msbinder obd
+application/x-mscardfile crd
+application/x-msclip clp
+application/x-msdownload exe dll com bat msi
+application/x-msmediaview mvb m13 m14
+application/x-msmetafile wmf wmz emf emz
+application/x-msmoney mny
+application/x-mspublisher pub
+application/x-msschedule scd
+application/x-msterminal trm
+application/x-mswrite wri
+application/x-netcdf nc cdf
+application/x-nzb nzb
+application/x-pkcs12 p12 pfx
+application/x-pkcs7-certificates p7b spc
+application/x-pkcs7-certreqresp p7r
+application/x-rar-compressed rar
+application/x-research-info-systems ris
+application/x-sh sh
+application/x-shar shar
+application/x-shockwave-flash swf
+application/x-silverlight-app xap
+application/x-sql sql
+application/x-stuffit sit
+application/x-stuffitx sitx
+application/x-subrip srt
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-t3vm-image t3
+application/x-tads gam
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex tex
+application/x-tex-tfm tfm
+application/x-texinfo texinfo texi
+application/x-tgif obj
+application/x-ustar ustar
+application/x-wais-source src
+application/x-x509-ca-cert der crt
+application/x-xfig fig
+application/x-xliff+xml xlf
+application/x-xpinstall xpi
+application/x-xz xz
+application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8
+# application/x400-bp
+application/xaml+xml xaml
+# application/xcap-att+xml
+# application/xcap-caps+xml
+application/xcap-diff+xml xdf
+# application/xcap-el+xml
+# application/xcap-error+xml
+# application/xcap-ns+xml
+# application/xcon-conference-info-diff+xml
+# application/xcon-conference-info+xml
+application/xenc+xml xenc
+application/xhtml+xml xhtml xht
+# application/xhtml-voice+xml
+application/xml xml xsl
+application/xml-dtd dtd
+# application/xml-external-parsed-entity
+# application/xmpp+xml
+application/xop+xml xop
+application/xproc+xml xpl
+application/xslt+xml xslt
+application/xspf+xml xspf
+application/xv+xml mxml xhvml xvml xvm
+application/yang yang
+application/yin+xml yin
+application/zip zip
+# audio/1d-interleaved-parityfec
+# audio/32kadpcm
+# audio/3gpp
+# audio/3gpp2
+# audio/ac3
+audio/adpcm adp
+# audio/amr
+# audio/amr-wb
+# audio/amr-wb+
+# audio/asc
+# audio/atrac-advanced-lossless
+# audio/atrac-x
+# audio/atrac3
+audio/basic au snd
+# audio/bv16
+# audio/bv32
+# audio/clearmode
+# audio/cn
+# audio/dat12
+# audio/dls
+# audio/dsr-es201108
+# audio/dsr-es202050
+# audio/dsr-es202211
+# audio/dsr-es202212
+# audio/dv
+# audio/dvi4
+# audio/eac3
+# audio/evrc
+# audio/evrc-qcp
+# audio/evrc0
+# audio/evrc1
+# audio/evrcb
+# audio/evrcb0
+# audio/evrcb1
+# audio/evrcwb
+# audio/evrcwb0
+# audio/evrcwb1
+# audio/example
+# audio/fwdred
+# audio/g719
+# audio/g722
+# audio/g7221
+# audio/g723
+# audio/g726-16
+# audio/g726-24
+# audio/g726-32
+# audio/g726-40
+# audio/g728
+# audio/g729
+# audio/g7291
+# audio/g729d
+# audio/g729e
+# audio/gsm
+# audio/gsm-efr
+# audio/gsm-hr-08
+# audio/ilbc
+# audio/ip-mr_v2.5
+# audio/isac
+# audio/l16
+# audio/l20
+# audio/l24
+# audio/l8
+# audio/lpc
+audio/midi mid midi kar rmi
+# audio/mobile-xmf
+audio/mp4 mp4a
+# audio/mp4a-latm
+# audio/mpa
+# audio/mpa-robust
+audio/mpeg mpga mp2 mp2a mp3 m2a m3a
+# audio/mpeg4-generic
+# audio/musepack
+audio/ogg oga ogg spx
+# audio/opus
+# audio/parityfec
+# audio/pcma
+# audio/pcma-wb
+# audio/pcmu-wb
+# audio/pcmu
+# audio/prs.sid
+# audio/qcelp
+# audio/red
+# audio/rtp-enc-aescm128
+# audio/rtp-midi
+# audio/rtx
+audio/s3m s3m
+audio/silk sil
+# audio/smv
+# audio/smv0
+# audio/smv-qcp
+# audio/sp-midi
+# audio/speex
+# audio/t140c
+# audio/t38
+# audio/telephone-event
+# audio/tone
+# audio/uemclip
+# audio/ulpfec
+# audio/vdvi
+# audio/vmr-wb
+# audio/vnd.3gpp.iufp
+# audio/vnd.4sb
+# audio/vnd.audiokoz
+# audio/vnd.celp
+# audio/vnd.cisco.nse
+# audio/vnd.cmles.radio-events
+# audio/vnd.cns.anp1
+# audio/vnd.cns.inf1
+audio/vnd.dece.audio uva uvva
+audio/vnd.digital-winds eol
+# audio/vnd.dlna.adts
+# audio/vnd.dolby.heaac.1
+# audio/vnd.dolby.heaac.2
+# audio/vnd.dolby.mlp
+# audio/vnd.dolby.mps
+# audio/vnd.dolby.pl2
+# audio/vnd.dolby.pl2x
+# audio/vnd.dolby.pl2z
+# audio/vnd.dolby.pulse.1
+audio/vnd.dra dra
+audio/vnd.dts dts
+audio/vnd.dts.hd dtshd
+# audio/vnd.dvb.file
+# audio/vnd.everad.plj
+# audio/vnd.hns.audio
+audio/vnd.lucent.voice lvp
+audio/vnd.ms-playready.media.pya pya
+# audio/vnd.nokia.mobile-xmf
+# audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800 ecelp4800
+audio/vnd.nuera.ecelp7470 ecelp7470
+audio/vnd.nuera.ecelp9600 ecelp9600
+# audio/vnd.octel.sbc
+# audio/vnd.qcelp
+# audio/vnd.rhetorex.32kadpcm
+audio/vnd.rip rip
+# audio/vnd.sealedmedia.softseal.mpeg
+# audio/vnd.vmx.cvsd
+# audio/vorbis
+# audio/vorbis-config
+audio/webm weba
+audio/x-aac aac
+audio/x-aiff aif aiff aifc
+audio/x-caf caf
+audio/x-flac flac
+audio/x-matroska mka
+audio/x-mpegurl m3u
+audio/x-ms-wax wax
+audio/x-ms-wma wma
+audio/x-pn-realaudio ram ra
+audio/x-pn-realaudio-plugin rmp
+# audio/x-tta
+audio/x-wav wav
+audio/xm xm
+chemical/x-cdx cdx
+chemical/x-cif cif
+chemical/x-cmdf cmdf
+chemical/x-cml cml
+chemical/x-csml csml
+# chemical/x-pdb
+chemical/x-xyz xyz
+image/bmp bmp
+image/cgm cgm
+# image/example
+# image/fits
+image/g3fax g3
+image/gif gif
+image/ief ief
+# image/jp2
+image/jpeg jpeg jpg jpe
+# image/jpm
+# image/jpx
+image/ktx ktx
+# image/naplps
+image/png png
+image/prs.btif btif
+# image/prs.pti
+image/sgi sgi
+image/svg+xml svg svgz
+# image/t38
+image/tiff tiff tif
+# image/tiff-fx
+image/vnd.adobe.photoshop psd
+# image/vnd.cns.inf2
+image/vnd.dece.graphic uvi uvvi uvg uvvg
+image/vnd.dvb.subtitle sub
+image/vnd.djvu djvu djv
+image/vnd.dwg dwg
+image/vnd.dxf dxf
+image/vnd.fastbidsheet fbs
+image/vnd.fpx fpx
+image/vnd.fst fst
+image/vnd.fujixerox.edmics-mmr mmr
+image/vnd.fujixerox.edmics-rlc rlc
+# image/vnd.globalgraphics.pgb
+# image/vnd.microsoft.icon
+# image/vnd.mix
+image/vnd.ms-modi mdi
+image/vnd.ms-photo wdp
+image/vnd.net-fpx npx
+# image/vnd.radiance
+# image/vnd.sealed.png
+# image/vnd.sealedmedia.softseal.gif
+# image/vnd.sealedmedia.softseal.jpg
+# image/vnd.svf
+image/vnd.wap.wbmp wbmp
+image/vnd.xiff xif
+image/webp webp
+image/x-3ds 3ds
+image/x-cmu-raster ras
+image/x-cmx cmx
+image/x-freehand fh fhc fh4 fh5 fh7
+image/x-icon ico
+image/x-mrsid-image sid
+image/x-pcx pcx
+image/x-pict pic pct
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-tga tga
+image/x-xbitmap xbm
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+# message/cpim
+# message/delivery-status
+# message/disposition-notification
+# message/example
+# message/external-body
+# message/feedback-report
+# message/global
+# message/global-delivery-status
+# message/global-disposition-notification
+# message/global-headers
+# message/http
+# message/imdn+xml
+# message/news
+# message/partial
+message/rfc822 eml mime
+# message/s-http
+# message/sip
+# message/sipfrag
+# message/tracking-status
+# message/vnd.si.simp
+# model/example
+model/iges igs iges
+model/mesh msh mesh silo
+model/vnd.collada+xml dae
+model/vnd.dwf dwf
+# model/vnd.flatland.3dml
+model/vnd.gdl gdl
+# model/vnd.gs-gdl
+# model/vnd.gs.gdl
+model/vnd.gtw gtw
+# model/vnd.moml+xml
+model/vnd.mts mts
+# model/vnd.parasolid.transmit.binary
+# model/vnd.parasolid.transmit.text
+model/vnd.vtu vtu
+model/vrml wrl vrml
+model/x3d+binary x3db x3dbz
+model/x3d+vrml x3dv x3dvz
+model/x3d+xml x3d x3dz
+# multipart/alternative
+# multipart/appledouble
+# multipart/byteranges
+# multipart/digest
+# multipart/encrypted
+# multipart/example
+# multipart/form-data
+# multipart/header-set
+# multipart/mixed
+# multipart/parallel
+# multipart/related
+# multipart/report
+# multipart/signed
+# multipart/voice-message
+# text/1d-interleaved-parityfec
+text/cache-manifest appcache
+text/calendar ics ifb
+text/css css
+text/csv csv
+# text/directory
+# text/dns
+# text/ecmascript
+# text/enriched
+# text/example
+# text/fwdred
+text/html html htm
+# text/javascript
+text/n3 n3
+# text/parityfec
+text/plain txt text conf def list log in
+# text/prs.fallenstein.rst
+text/prs.lines.tag dsc
+# text/vnd.radisys.msml-basic-layout
+# text/red
+# text/rfc822-headers
+text/richtext rtx
+# text/rtf
+# text/rtp-enc-aescm128
+# text/rtx
+text/sgml sgml sgm
+# text/t140
+text/tab-separated-values tsv
+text/troff t tr roff man me ms
+text/turtle ttl
+# text/ulpfec
+text/uri-list uri uris urls
+text/vcard vcard
+# text/vnd.abc
+text/vnd.curl curl
+text/vnd.curl.dcurl dcurl
+text/vnd.curl.scurl scurl
+text/vnd.curl.mcurl mcurl
+# text/vnd.dmclientscript
+text/vnd.dvb.subtitle sub
+# text/vnd.esmertec.theme-descriptor
+text/vnd.fly fly
+text/vnd.fmi.flexstor flx
+text/vnd.graphviz gv
+text/vnd.in3d.3dml 3dml
+text/vnd.in3d.spot spot
+# text/vnd.iptc.newsml
+# text/vnd.iptc.nitf
+# text/vnd.latex-z
+# text/vnd.motorola.reflex
+# text/vnd.ms-mediapackage
+# text/vnd.net2phone.commcenter.command
+# text/vnd.si.uricatalogue
+text/vnd.sun.j2me.app-descriptor jad
+# text/vnd.trolltech.linguist
+# text/vnd.wap.si
+# text/vnd.wap.sl
+text/vnd.wap.wml wml
+text/vnd.wap.wmlscript wmls
+text/x-asm s asm
+text/x-c c cc cxx cpp h hh dic
+text/x-fortran f for f77 f90
+text/x-java-source java
+text/x-opml opml
+text/x-pascal p pas
+text/x-nfo nfo
+text/x-setext etx
+text/x-sfv sfv
+text/x-uuencode uu
+text/x-vcalendar vcs
+text/x-vcard vcf
+# text/xml
+# text/xml-external-parsed-entity
+# video/1d-interleaved-parityfec
+video/3gpp 3gp
+# video/3gpp-tt
+video/3gpp2 3g2
+# video/bmpeg
+# video/bt656
+# video/celb
+# video/dv
+# video/example
+video/h261 h261
+video/h263 h263
+# video/h263-1998
+# video/h263-2000
+video/h264 h264
+# video/h264-rcdo
+# video/h264-svc
+video/jpeg jpgv
+# video/jpeg2000
+video/jpm jpm jpgm
+video/mj2 mj2 mjp2
+# video/mp1s
+# video/mp2p
+# video/mp2t
+video/mp4 mp4 mp4v mpg4
+# video/mp4v-es
+video/mpeg mpeg mpg mpe m1v m2v
+# video/mpeg4-generic
+# video/mpv
+# video/nv
+video/ogg ogv
+# video/parityfec
+# video/pointer
+video/quicktime qt mov
+# video/raw
+# video/rtp-enc-aescm128
+# video/rtx
+# video/smpte292m
+# video/ulpfec
+# video/vc1
+# video/vnd.cctv
+video/vnd.dece.hd uvh uvvh
+video/vnd.dece.mobile uvm uvvm
+# video/vnd.dece.mp4
+video/vnd.dece.pd uvp uvvp
+video/vnd.dece.sd uvs uvvs
+video/vnd.dece.video uvv uvvv
+# video/vnd.directv.mpeg
+# video/vnd.directv.mpeg-tts
+# video/vnd.dlna.mpeg-tts
+video/vnd.dvb.file dvb
+video/vnd.fvt fvt
+# video/vnd.hns.video
+# video/vnd.iptvforum.1dparityfec-1010
+# video/vnd.iptvforum.1dparityfec-2005
+# video/vnd.iptvforum.2dparityfec-1010
+# video/vnd.iptvforum.2dparityfec-2005
+# video/vnd.iptvforum.ttsavc
+# video/vnd.iptvforum.ttsmpeg2
+# video/vnd.motorola.video
+# video/vnd.motorola.videop
+video/vnd.mpegurl mxu m4u
+video/vnd.ms-playready.media.pyv pyv
+# video/vnd.nokia.interleaved-multimedia
+# video/vnd.nokia.videovoip
+# video/vnd.objectvideo
+# video/vnd.sealed.mpeg1
+# video/vnd.sealed.mpeg4
+# video/vnd.sealed.swf
+# video/vnd.sealedmedia.softseal.mov
+video/vnd.uvvu.mp4 uvu uvvu
+video/vnd.vivo viv
+video/webm webm
+video/x-f4v f4v
+video/x-fli fli
+video/x-flv flv
+video/x-m4v m4v
+video/x-matroska mkv mk3d mks
+video/x-mng mng
+video/x-ms-asf asf asx
+video/x-ms-vob vob
+video/x-ms-wm wm
+video/x-ms-wmv wmv
+video/x-ms-wmx wmx
+video/x-ms-wvx wvx
+video/x-msvideo avi
+video/x-sgi-movie movie
+video/x-smv smv
+x-conference/x-cooltalk ice
\ No newline at end of file
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/.DS_Store b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/.DS_Store
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/.DS_Store
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/.DS_Store
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default-Landscape@2x~ipad.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Default-Landscape@2x~ipad.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default-Landscape@2x~ipad.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default-Landscape~ipad.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Default-Landscape~ipad.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default-Landscape~ipad.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default-Portrait@2x~ipad.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Default-Portrait@2x~ipad.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default-Portrait@2x~ipad.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default-Portrait~ipad.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Default-Portrait~ipad.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default-Portrait~ipad.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Default.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Default.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Default@2x.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default@2x.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Default@2x.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Default@2x.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon-144.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-144.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon-144.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-144.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon-72.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-72.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon-72.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-72.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-Small-100.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon-Small-100.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-Small-100.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-Small-50.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon-Small-50.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-Small-50.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-Small.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon-Small.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-Small.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-Small@2x.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon-Small@2x.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon-Small@2x.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon@2x.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon@2x.png
rename to C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon@2x.png
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon~ipad.png
new file mode 100644
index 0000000..7abf98c
Binary files /dev/null and b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon~ipad.png differ
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon~ipad@2x.png
new file mode 100644
index 0000000..4621619
Binary files /dev/null and b/C02 - Documents (Take 2)/01 - UTI Utilities/AppArt/Icon~ipad@2x.png differ
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..3d95b45
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/project.pbxproj
@@ -0,0 +1,329 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8E8E4A5715EBCB3000172C67 /* UTIHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8E4A5615EBCB3000172C67 /* UTIHelper.m */; };
+ 8E8E4A5D15EBCD3400172C67 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E8E4A5C15EBCD3400172C67 /* MobileCoreServices.framework */; };
+ 8E8E4A6015EBD04200172C67 /* MIMEHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8E4A5F15EBD04200172C67 /* MIMEHelper.m */; };
+ 8EA6B98315EFBDAE00BAD380 /* ApacheMIMETypes.txt in Resources */ = {isa = PBXBuildFile; fileRef = 8EA6B98215EFBDAE00BAD380 /* ApacheMIMETypes.txt */; };
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF0D158B9B4800F96828 /* Icon.png */; };
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */; };
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */; };
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */; };
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */; };
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF14158B9B7900F96828 /* Default.png */; };
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF15158B9B7900F96828 /* Default@2x.png */; };
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF16158B9B7900F96828 /* Icon@2x.png */; };
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */; };
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */; };
+ 8EE7D0F515D843680026D7B9 /* Notes in Resources */ = {isa = PBXBuildFile; fileRef = 8EE7D0F415D843680026D7B9 /* Notes */; };
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E015892BA600A81FD2 /* UIKit.framework */; };
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E215892BA600A81FD2 /* Foundation.framework */; };
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */; };
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8EF624E915892BA600A81FD2 /* InfoPlist.strings */; };
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF624EC15892BA600A81FD2 /* main.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 8E8E4A5515EBCB3000172C67 /* UTIHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTIHelper.h; sourceTree = ""; };
+ 8E8E4A5615EBCB3000172C67 /* UTIHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UTIHelper.m; sourceTree = ""; };
+ 8E8E4A5C15EBCD3400172C67 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
+ 8E8E4A5E15EBD04200172C67 /* MIMEHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MIMEHelper.h; sourceTree = ""; };
+ 8E8E4A5F15EBD04200172C67 /* MIMEHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MIMEHelper.m; sourceTree = ""; };
+ 8EA6B98215EFBDAE00BAD380 /* ApacheMIMETypes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ApacheMIMETypes.txt; sourceTree = ""; };
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = AppArt/Icon.png; sourceTree = ""; };
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "AppArt/Default-Landscape@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "AppArt/Default-Landscape~ipad.png"; sourceTree = ""; };
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "AppArt/Default-Portrait@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait~ipad.png"; path = "AppArt/Default-Portrait~ipad.png"; sourceTree = ""; };
+ 8EB9BF14158B9B7900F96828 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = AppArt/Default.png; sourceTree = ""; };
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "AppArt/Default@2x.png"; sourceTree = ""; };
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "AppArt/Icon@2x.png"; sourceTree = ""; };
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad.png"; path = "AppArt/Icon~ipad.png"; sourceTree = ""; };
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad@2x.png"; path = "AppArt/Icon~ipad@2x.png"; sourceTree = ""; };
+ 8EE7D0F415D843680026D7B9 /* Notes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Notes; sourceTree = ""; };
+ 8EE9B88F15B746C400F4FCCA /* Utility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Utility.h; sourceTree = ""; };
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HelloWorld-Info.plist"; sourceTree = ""; };
+ 8EF624EA15892BA600A81FD2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 8EF624EC15892BA600A81FD2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; };
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HelloWorld-Prefix.pch"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8EF624D915892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8E8E4A5D15EBCD3400172C67 /* MobileCoreServices.framework in Frameworks */,
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */,
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */,
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 8EF624D115892BA600A81FD2 = {
+ isa = PBXGroup;
+ children = (
+ 8EF624EC15892BA600A81FD2 /* main.m */,
+ 8E8E4A5515EBCB3000172C67 /* UTIHelper.h */,
+ 8E8E4A5615EBCB3000172C67 /* UTIHelper.m */,
+ 8E8E4A5E15EBD04200172C67 /* MIMEHelper.h */,
+ 8E8E4A5F15EBD04200172C67 /* MIMEHelper.m */,
+ 8EA6B98215EFBDAE00BAD380 /* ApacheMIMETypes.txt */,
+ 8EF624E715892BA600A81FD2 /* Supporting Files */,
+ 8EF624DF15892BA600A81FD2 /* Frameworks */,
+ 8EF624DD15892BA600A81FD2 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 8EF624DD15892BA600A81FD2 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8EF624DF15892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8E8E4A5C15EBCD3400172C67 /* MobileCoreServices.framework */,
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */,
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */,
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 8EF624E715892BA600A81FD2 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 8EE9B88F15B746C400F4FCCA /* Utility.h */,
+ 8EE7D0F415D843680026D7B9 /* Notes */,
+ 8EF6250B15892CDA00A81FD2 /* System Art */,
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */,
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */,
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ path = HelloWorld;
+ sourceTree = "";
+ };
+ 8EF6250B15892CDA00A81FD2 /* System Art */ = {
+ isa = PBXGroup;
+ children = (
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */,
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */,
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */,
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */,
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */,
+ 8EB9BF14158B9B7900F96828 /* Default.png */,
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */,
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */,
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */,
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */,
+ );
+ name = "System Art";
+ path = ..;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */;
+ buildPhases = (
+ 8EF624D815892BA600A81FD2 /* Sources */,
+ 8EF624D915892BA600A81FD2 /* Frameworks */,
+ 8EF624DA15892BA600A81FD2 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HelloWorld;
+ productName = HelloWorld;
+ productReference = 8EF624DC15892BA600A81FD2 /* HelloWorld.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 8EF624D315892BA600A81FD2 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ ORGANIZATIONNAME = "Erica Sadun";
+ };
+ buildConfigurationList = 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 8EF624D115892BA600A81FD2;
+ productRefGroup = 8EF624DD15892BA600A81FD2 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8EF624DA15892BA600A81FD2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */,
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */,
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */,
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */,
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */,
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */,
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */,
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */,
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */,
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */,
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */,
+ 8EE7D0F515D843680026D7B9 /* Notes in Resources */,
+ 8EA6B98315EFBDAE00BAD380 /* ApacheMIMETypes.txt in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8EF624D815892BA600A81FD2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */,
+ 8E8E4A5715EBCB3000172C67 /* UTIHelper.m in Sources */,
+ 8E8E4A6015EBD04200172C67 /* MIMEHelper.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 8EF624EA15892BA600A81FD2 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 8EF624F215892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ 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_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 8EF624F315892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 8EF624F515892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 8EF624F615892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F215892BA600A81FD2 /* Debug */,
+ 8EF624F315892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F515892BA600A81FD2 /* Debug */,
+ 8EF624F615892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 8EF624D315892BA600A81FD2 /* Project object */;
+}
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..69a7e3a
Binary files /dev/null and b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
new file mode 100644
index 0000000..05301bc
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
@@ -0,0 +1,5 @@
+
+
+
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
rename to C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
rename to C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/HelloWorld-Info.plist
new file mode 100644
index 0000000..0ee1800
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/HelloWorld-Info.plist
@@ -0,0 +1,65 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${PRODUCT_NAME}
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIcons
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ Icon.png
+ Icon@2x.png
+ Default.png
+ Default@2x.png
+ Icon~ipad.png
+ Icon~ipad@2x.png
+ Default-Portrait~ipad.png
+ Default-Portrait@2x~ipad.png
+ Default-Landscape~ipad.png
+ Default-Landscape@2x~ipad.png
+
+
+
+ CFBundleIdentifier
+ com.sadun.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+ UIInterfaceOrientationPortraitUpsideDown
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/HelloWorld-Prefix.pch
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld/HelloWorld-Prefix.pch
rename to C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/HelloWorld-Prefix.pch
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/Notes b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/Notes
new file mode 100644
index 0000000..e69de29
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/Utility.h b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/Utility.h
new file mode 100644
index 0000000..0ee0e9f
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/Utility.h
@@ -0,0 +1,106 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#pragma mark - Cookbook
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+
+#pragma mark - Bar Buttons
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+#define SYSBARBUTTON(ITEM, SELECTOR) [[UIBarButtonItem alloc] initWithBarButtonSystemItem:ITEM target:self action:SELECTOR]
+#define IMGBARBUTTON(IMAGE, SELECTOR) [[UIBarButtonItem alloc] initWithImage:IMAGE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+#define CUSTOMBARBUTTON(VIEW) [[UIBarButtonItem alloc] initWithCustomView:VIEW]
+
+#define SYSBARBUTTON_TARGET(ITEM, TARGET, SELECTOR) [[UIBarButtonItem alloc] initWithBarButtonSystemItem:ITEM target:TARGET action:SELECTOR]
+#define BARBUTTON_TARGET(TITLE, TARGET, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:TARGET action:SELECTOR]
+
+#pragma mark - Platform
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
+
+#pragma mark - Orientation
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait(self.interfaceOrientation)
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation) || UIDeviceOrientationIsPortrait(self.interfaceOrientation)
+
+#pragma mark - Debug
+#define BOOL_CHECK(TITLE, CHECK_ITEM) printf("%s: %s\n", TITLE, (CHECK_ITEM) ? "Yes" : "No")
+
+#pragma mark - Geometry
+#define RECTCENTER(RECT) CGPointMake(CGRectGetMidX(RECT), CGRectGetMidY(RECT))
+#define RECT_PT(_X_, _Y_) CGRectMake(_X_, _Y_, 0.0f, 0.0f)
+#define RECT_SIZE(_W_, _H_) CGRectMake(0.0f, 0.0f, _W_, _H_)
+
+#pragma mark - Autosizing
+#define RESIZABLE(VIEW) [VIEW setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth]
+
+#pragma mark - Strings
+#define STREQ(STRING1, STRING2) ([STRING1 caseInsensitiveCompare:STRING2] == NSOrderedSame)
+#define PREFIXED(STRING1, STRING2) ([[STRING1 uppercaseString] hasPrefix:[STRING2 uppercaseString]])
+#define TRIMSTRING(STRING) ([STRING stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]])
+#define PADSTRING(STRING) ([NSString stringWithFormat:@" %@ ", TRIMSTRING(STRING)])
+
+#define STRDATA(STRING) ([STRING dataUsingEncoding:NSUTF8StringEncoding])
+#define DATASTR(DATA) ([[NSString alloc] initWithData:DATA encoding:NSUTF8StringEncoding])
+
+#define RECTSTRING(_aRect_) NSStringFromCGRect(_aRect_)
+#define POINTSTRING(_aPoint_) NSStringFromCGPoint(_aPoint_)
+#define SIZESTRING(_aSize_) NSStringFromCGSize(_aSize_)
+
+#pragma mark - Constraints
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+#define CONSTRAIN_VIEWS(PARENT, FORMAT, BINDINGS) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:BINDINGS]]
+
+// Stretch across axes
+#define STRETCH_VIEW_H(PARENT, VIEW) CONSTRAIN(PARENT, VIEW, @"H:|["#VIEW"(>=0)]|")
+#define STRETCH_VIEW_V(PARENT, VIEW) CONSTRAIN(PARENT, VIEW, @"V:|["#VIEW"(>=0)]|")
+#define STRETCH_VIEW(PARENT, VIEW) {STRETCH_VIEW_H(PARENT, VIEW); STRETCH_VIEW_V(PARENT, VIEW);}
+
+// Center along axes
+#define CENTER_VIEW_H(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]]
+#define CENTER_VIEW_V(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]]
+#define CENTER_VIEW(PARENT, VIEW) {CENTER_VIEW_H(PARENT, VIEW); CENTER_VIEW_V(PARENT, VIEW);}
+
+// Align to parent
+#define ALIGN_VIEW_LEFT(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_RIGHT(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeRight multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_TOP(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_BOTTOM(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]
+
+// Set Size
+#define CONSTRAIN_WIDTH(VIEW, WIDTH) CONSTRAIN(VIEW, VIEW, @"H:["#VIEW"(=="#WIDTH")]")
+#define CONSTRAIN_HEIGHT(VIEW, HEIGHT) CONSTRAIN(VIEW, VIEW, @"V:["#VIEW"(=="#HEIGHT")]")
+#define CONSTRAIN_SIZE(VIEW, HEIGHT, WIDTH) {CONSTRAIN_WIDTH(VIEW, WIDTH); CONSTRAIN_HEIGHT(VIEW, HEIGHT);}
+
+// Set Aspect
+#define CONSTRAIN_ASPECT(VIEW, ASPECT) [VIEW addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:VIEW attribute:NSLayoutAttributeHeight multiplier:(ASPECT) constant:0.0f]]
+
+// Order items
+#define CONSTRAIN_ORDER_H(PARENT, VIEW1, VIEW2) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(@"H:["#VIEW1"]->=0-["#VIEW2"]") options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW1, VIEW2)]]
+#define CONSTRAIN_ORDER_V(PARENT, VIEW1, VIEW2) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(@"V:["#VIEW1"]->=0-["#VIEW2"]") options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW1, VIEW2)]]
+
+#pragma mark - Defaults
+
+// Defaults
+#define DEFAULT_INT(_KEY_) [[NSUserDefaults standardUserDefaults] integerForKey:_KEY_]
+#define DEFAULT_OBJ(_KEY_) [[NSUserDefaults standardUserDefaults] objectForKey:_KEY_]
+
+#pragma mark - Util
+
+// Bail with complaint
+#define COMPLAIN_AND_BAIL(_COMPLAINT_, _ARG_) {NSLog(_COMPLAINT_, _ARG_); return;}
+#define COMPLAIN_AND_BAIL_NIL(_COMPLAINT_, _ARG_) {NSLog(_COMPLAINT_, _ARG_); return nil;}
+
+#pragma mark - Delegates and Controls
+
+// Delegate
+#define SAFE_PERFORM_WITH_ARG(THE_OBJECT, THE_SELECTOR, THE_ARG) (([THE_OBJECT respondsToSelector:THE_SELECTOR]) ? [THE_OBJECT performSelector:THE_SELECTOR withObject:THE_ARG] : nil)
+
+// Controls
+#define CALLBACK_VAL(_CONTROL_, _SELECTOR_) [_CONTROL_ addTarget:self action:_SELECTOR_ forControlEvents:UIControlEventValueChanged]
+#define CALLBACK_PRESS(_CONTROL_, _SELECTOR_) [_CONTROL_ addTarget:self action:_SELECTOR_ forControlEvents:UIControlEventTouchUpInside]
+#define SAFE_CALLBACK_VAL(_CONTROL_, _SELECTOR_) {if ([self respondsToSelector:_SELECTOR_]) CALLBACK_VAL(_CONTROL_, _SELECTOR_);}
+#define SAFE_CALLBACK_PRESS(_CONTROL_, _SELECTOR_) {if ([self respondsToSelector:_SELECTOR_]) CALLBACK_PRESS(_CONTROL_, _SELECTOR_);}
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/en.lproj/InfoPlist.strings
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld/en.lproj/InfoPlist.strings
rename to C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/en.lproj/InfoPlist.strings
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/main.m b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/main.m
new file mode 100644
index 0000000..d9b5674
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/HelloWorld/main.m
@@ -0,0 +1,107 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import "Utility.h"
+
+#import "UTIHelper.h"
+#import "MIMEHelper.h"
+
+#define VARIOUS_EXTENSIONS @[@"3dm",@"3dmf",@"a",@"aab",@"aam",@"aas",@"abc",@"acgi",@"afl",@"ai",@"aif",@"aifc",@"aiff",@"aim",@"aip",@"ani",@"aos",@"aps",@"arc",@"arj",@"art",@"asf",@"asm",@"asp",@"asx",@"au",@"avi",@"avs",@"bcpio",@"bin",@"bm",@"bmp",@"boo",@"book",@"boz",@"bsh",@"bz",@"bz2",@"c",@"c++",@"cat",@"cc",@"ccad",@"cco",@"cdf",@"cer",@"cha",@"chat",@"class",@"com",@"conf",@"cpio",@"cpp",@"cpt",@"crl",@"crt",@"csh",@"css",@"cxx",@"dcr",@"deepv",@"def",@"der",@"dif",@"dir",@"dl",@"doc",@"dot",@"dp",@"drw",@"dump",@"dv",@"dvi",@"dwf",@"dwg",@"dxf",@"dxr",@"el",@"elc",@"env",@"eps",@"es",@"etx",@"evy",@"exe",@"f",@"f77",@"f90",@"fdf",@"fif",@"fli",@"flo",@"flx",@"fmf",@"for",@"fpx",@"frl",@"funk",@"g",@"g3",@"gif",@"gl",@"gsd",@"gsm",@"gsp",@"gss",@"gtar",@"gz",@"gzip",@"h",@"hdf",@"help",@"hgl",@"hh",@"hlb",@"hlp",@"hpg",@"hpgl",@"hqx",@"hta",@"htc",@"htm",@"html",@"htmls",@"htt",@"htx",@"ice",@"ico",@"idc",@"ief",@"iefs",@"iges",@"igs",@"ima",@"imap",@"inf",@"ins",@"ip",@"isu",@"it",@"iv",@"ivr",@"ivy",@"jam",@"jav",@"java",@"jcm",@"jfif",@"jfif-tbnl",@"jpe",@"jpeg",@"jpg",@"thm",@"jpg",@"jps",@"js",@"jut",@"kar",@"ksh",@"la",@"lam",@"latex",@"lha",@"lhx",@"list",@"lma",@"log",@"lsp",@"lst",@"lsx",@"ltx",@"lzh",@"lzx",@"m",@"m1v",@"m2a",@"m2v",@"m3u",@"man",@"map",@"mar",@"mbd",@"mc$",@"mcd",@"mcf",@"mcp",@"me",@"mht",@"mhtml",@"mid",@"midi",@"mif",@"mime",@"mjf",@"mjpg",@"mm",@"mme",@"mod",@"moov",@"mov",@"movie",@"mp2",@"mp3",@"mpa",@"mpc",@"mpe",@"mpeg",@"mpg",@"mpga",@"mpp",@"mpt",@"mpv",@"mpx",@"mrc",@"ms",@"mv",@"my",@"mzz",@"nap",@"naplps",@"nc",@"ncm",@"nif",@"niff",@"nix",@"nsc",@"nvd",@"o",@"oda",@"omc",@"omcd",@"omcr",@"p",@"p10",@"p12",@"p7a",@"p7c",@"p7m",@"p7r",@"p7s",@"part",@"pas",@"pbm",@"pcl",@"pct",@"pcx",@"pdb",@"pdf",@"pfunk",@"pgm",@"pic",@"pict",@"pkg",@"pko",@"pl",@"plist",@"plx",@"pm",@"pm4",@"pm5",@"png",@"pnm",@"pot",@"pov",@"ppa",@"ppm",@"pps",@"ppt",@"ppz",@"pre",@"prt",@"ps",@"psd",@"pvu",@"pwz",@"py",@"pyc",@"qcp",@"qd3",@"qd3d",@"qif",@"qt",@"qtc",@"qti",@"qtif",@"ra",@"ram",@"ras",@"rast",@"rexx",@"rf",@"rgb",@"rm",@"rmi",@"rmm",@"rmp",@"rng",@"rnx",@"roff",@"rp",@"rpm",@"rt",@"rtf",@"rtx",@"rv",@"s",@"s3m",@"saveme",@"sbk",@"scm",@"sdml",@"sdp",@"sdr",@"sea",@"set",@"sgm",@"sgml",@"sh",@"shar",@"shtml",@"sid",@"sit",@"skd",@"skm",@"skp",@"skt",@"sl",@"smi",@"smil",@"snd",@"sol",@"spc",@"spl",@"spr",@"sprite",@"src",@"ssi",@"ssm",@"sst",@"step",@"stl",@"stp",@"sv4cpio",@"sv4crc",@"svf",@"svr",@"swf",@"t",@"talk",@"tar",@"tbk",@"tcl",@"tcsh",@"tex",@"texi",@"texinfo",@"text",@"tgz",@"tif",@"tiff",@"tr",@"tsi",@"tsp",@"tsv",@"turbot",@"txt",@"uil",@"uni",@"unis",@"unv",@"uri",@"uris",@"ustar",@"uu",@"uue",@"vcd",@"vcs",@"vda",@"vdo",@"vew",@"viv",@"vivo",@"vmd",@"vmf",@"voc",@"vos",@"vox",@"vqe",@"vqf",@"vql",@"vrml",@"vrt",@"vsd",@"vst",@"vsw",@"w60",@"w61",@"w6w",@"wav",@"wb1",@"wbmp",@"web",@"wiz",@"wk1",@"wmf",@"wml",@"wmlc",@"wmls",@"wmlsc",@"word",@"wp",@"wp5",@"wp6",@"wpd",@"wq1",@"wri",@"wrl",@"wrz",@"wsc",@"wsrc",@"wtk",@"xbm",@"xdr",@"xgz",@"xif",@"xl",@"xla",@"xlb",@"xlc",@"xld",@"xlk",@"xll",@"xlm",@"xls",@"xlt",@"xlv",@"xlw",@"xm",@"xml",@"xmz",@"xpix",@"xpm",@"x-png",@"xsr",@"xwd",@"xyz",@"z",@"zip",@"zoo",@"zsh"]
+
+@interface TestBedViewController : UIViewController
+@end
+
+@implementation TestBedViewController
+{
+ UITextView *textView;
+ NSMutableString *log;
+}
+
+- (void) doLog: (NSString *) formatstring, ...
+{
+ if (!formatstring) return;
+
+ va_list arglist;
+ va_start(arglist, formatstring);
+ NSString *outstring = [[NSString alloc] initWithFormat:formatstring arguments:arglist];
+ va_end(arglist);
+
+ if (!log) log = [NSMutableString string];
+
+ NSLog(@"%@", outstring);
+
+ [log appendString:outstring];
+ [log appendString:@"\n"];
+ textView.text = log;
+}
+
+- (void) showExtensions
+{
+ int count = 0; // total
+ int count1 = 0; // preferred MIME types
+ int count2 = 0; // Apache
+
+ for (NSString *ext in VARIOUS_EXTENSIONS)
+ {
+ NSString *uti = preferredUTIForExtension(ext);
+ NSString *mime1 = preferredMimeTypeForUTI(uti);
+ NSString *mime2 = mimeForExtension(ext); // Using Apache
+ // [self doLog:@"%@: %@ [%@] [%@]", ext, uti, mime1, mime2];
+ NSLog(@"%@: %@ [%@] [%@]", ext, uti, mime1, mime2);
+ count++;
+ if (mime1) count1++;
+ if (mime2) count2++;
+ }
+
+ [self doLog:@"Number of items: %d", count];
+ [self doLog:@"Preferred MIME types: %d", count1];
+ [self doLog:@"Apache: %d", count2];
+}
+
+- (void) loadView
+{
+ [super loadView];
+ self.view.backgroundColor = [UIColor whiteColor];
+
+ self.navigationItem.leftBarButtonItem = BARBUTTON(@"Ext", @selector(showExtensions));
+
+ textView = [[UITextView alloc] init];
+ [self.view addSubview:textView];
+ PREPCONSTRAINTS(textView);
+ STRETCH_VIEW(self.view, textView);
+
+ textView.font = [UIFont fontWithName:@"Futura" size:18.0f];
+ textView.editable = NO;
+}
+@end
+
+#pragma mark - Application Setup -
+@interface TestBedAppDelegate : NSObject
+@end
+@implementation TestBedAppDelegate
+{
+ UIWindow *window;
+}
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ // [application setStatusBarHidden:YES];
+ [[UINavigationBar appearance] setTintColor:COOKBOOK_PURPLE_COLOR];
+
+ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ TestBedViewController *tbvc = [[TestBedViewController alloc] init];
+ UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:tbvc];
+ window.rootViewController = nav;
+ [window makeKeyAndVisible];
+ return YES;
+}
+@end
+int main(int argc, char *argv[]) {
+ @autoreleasepool {
+ int retVal = UIApplicationMain(argc, argv, nil, @"TestBedAppDelegate");
+ return retVal;
+ }
+}
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper-Old.m b/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper-Old.m
new file mode 100644
index 0000000..87265dd
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper-Old.m
@@ -0,0 +1,659 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import "MIMEHelper.h"
+
+#define STRINGEQ(X,Y) ([X caseInsensitiveCompare:Y] == NSOrderedSame)
+
+NSString *mimeForExtension(NSString *extension)
+{
+ NSString *uc = [extension uppercaseString];
+ if(STRINGEQ(uc, @"3dm")) return @"x-world/x-3dmf";
+ if(STRINGEQ(uc, @"3dmf")) return @"x-world/x-3dmf";
+ if(STRINGEQ(uc, @"a")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"aab")) return @"application/x-authorware-bin";
+ if(STRINGEQ(uc, @"aam")) return @"application/x-authorware-map";
+ if(STRINGEQ(uc, @"aas")) return @"application/x-authorware-seg";
+ if(STRINGEQ(uc, @"abc")) return @"text/vnd.abc";
+ if(STRINGEQ(uc, @"acgi")) return @"text/html";
+ if(STRINGEQ(uc, @"afl")) return @"video/animaflex";
+ if(STRINGEQ(uc, @"ai")) return @"application/postscript";
+ if(STRINGEQ(uc, @"aif")) return @"audio/aiff";
+ if(STRINGEQ(uc, @"aif")) return @"audio/x-aiff";
+ if(STRINGEQ(uc, @"aifc")) return @"audio/aiff";
+ if(STRINGEQ(uc, @"aifc")) return @"audio/x-aiff";
+ if(STRINGEQ(uc, @"aiff")) return @"audio/aiff";
+ if(STRINGEQ(uc, @"aiff")) return @"audio/x-aiff";
+ if(STRINGEQ(uc, @"aim")) return @"application/x-aim";
+ if(STRINGEQ(uc, @"aip")) return @"text/x-audiosoft-intra";
+ if(STRINGEQ(uc, @"ani")) return @"application/x-navi-animation";
+ if(STRINGEQ(uc, @"aos")) return @"application/x-nokia-9000-communicator-add-on-software";
+ if(STRINGEQ(uc, @"aps")) return @"application/mime";
+ if(STRINGEQ(uc, @"arc")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"arj")) return @"application/arj";
+ if(STRINGEQ(uc, @"arj")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"art")) return @"image/x-jg";
+ if(STRINGEQ(uc, @"asf")) return @"video/x-ms-asf";
+ if(STRINGEQ(uc, @"asm")) return @"text/x-asm";
+ if(STRINGEQ(uc, @"asp")) return @"text/asp";
+ if(STRINGEQ(uc, @"asx")) return @"application/x-mplayer2";
+ if(STRINGEQ(uc, @"asx")) return @"video/x-ms-asf";
+ if(STRINGEQ(uc, @"asx")) return @"video/x-ms-asf-plugin";
+ if(STRINGEQ(uc, @"au")) return @"audio/basic";
+ if(STRINGEQ(uc, @"au")) return @"audio/x-au";
+ if(STRINGEQ(uc, @"avi")) return @"application/x-troff-msvideo";
+ if(STRINGEQ(uc, @"avi")) return @"video/avi";
+ if(STRINGEQ(uc, @"avi")) return @"video/msvideo";
+ if(STRINGEQ(uc, @"avi")) return @"video/x-msvideo";
+ if(STRINGEQ(uc, @"avs")) return @"video/avs-video";
+ if(STRINGEQ(uc, @"bcpio")) return @"application/x-bcpio";
+ if(STRINGEQ(uc, @"bin")) return @"application/mac-binary";
+ if(STRINGEQ(uc, @"bin")) return @"application/macbinary";
+ if(STRINGEQ(uc, @"bin")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"bin")) return @"application/x-binary";
+ if(STRINGEQ(uc, @"bin")) return @"application/x-macbinary";
+ if(STRINGEQ(uc, @"bm")) return @"image/bmp";
+ if(STRINGEQ(uc, @"bmp")) return @"image/bmp";
+ if(STRINGEQ(uc, @"bmp")) return @"image/x-windows-bmp";
+ if(STRINGEQ(uc, @"boo")) return @"application/book";
+ if(STRINGEQ(uc, @"book")) return @"application/book";
+ if(STRINGEQ(uc, @"boz")) return @"application/x-bzip2";
+ if(STRINGEQ(uc, @"bsh")) return @"application/x-bsh";
+ if(STRINGEQ(uc, @"bz")) return @"application/x-bzip";
+ if(STRINGEQ(uc, @"bz2")) return @"application/x-bzip2";
+ if(STRINGEQ(uc, @"c")) return @"text/plain";
+ if(STRINGEQ(uc, @"c")) return @"text/x-c";
+ if(STRINGEQ(uc, @"c++")) return @"text/plain";
+ if(STRINGEQ(uc, @"cat")) return @"application/vnd.ms-pki.seccat";
+ if(STRINGEQ(uc, @"cc")) return @"text/plain";
+ if(STRINGEQ(uc, @"cc")) return @"text/x-c";
+ if(STRINGEQ(uc, @"ccad")) return @"application/clariscad";
+ if(STRINGEQ(uc, @"cco")) return @"application/x-cocoa";
+ if(STRINGEQ(uc, @"cdf")) return @"application/cdf";
+ if(STRINGEQ(uc, @"cdf")) return @"application/x-cdf";
+ if(STRINGEQ(uc, @"cdf")) return @"application/x-netcdf";
+ if(STRINGEQ(uc, @"cer")) return @"application/pkix-cert";
+ if(STRINGEQ(uc, @"cer")) return @"application/x-x509-ca-cert";
+ if(STRINGEQ(uc, @"cha")) return @"application/x-chat";
+ if(STRINGEQ(uc, @"chat")) return @"application/x-chat";
+ if(STRINGEQ(uc, @"class")) return @"application/java";
+ if(STRINGEQ(uc, @"class")) return @"application/java-byte-code";
+ if(STRINGEQ(uc, @"class")) return @"application/x-java-class";
+ if(STRINGEQ(uc, @"com")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"com")) return @"text/plain";
+ if(STRINGEQ(uc, @"conf")) return @"text/plain";
+ if(STRINGEQ(uc, @"cpio")) return @"application/x-cpio";
+ if(STRINGEQ(uc, @"cpp")) return @"text/x-c";
+ if(STRINGEQ(uc, @"cpt")) return @"application/mac-compactpro";
+ if(STRINGEQ(uc, @"cpt")) return @"application/x-compactpro";
+ if(STRINGEQ(uc, @"cpt")) return @"application/x-cpt";
+ if(STRINGEQ(uc, @"crl")) return @"application/pkcs-crl";
+ if(STRINGEQ(uc, @"crl")) return @"application/pkix-crl";
+ if(STRINGEQ(uc, @"crt")) return @"application/pkix-cert";
+ if(STRINGEQ(uc, @"crt")) return @"application/x-x509-ca-cert";
+ if(STRINGEQ(uc, @"crt")) return @"application/x-x509-user-cert";
+ if(STRINGEQ(uc, @"csh")) return @"application/x-csh";
+ if(STRINGEQ(uc, @"csh")) return @"text/x-script.csh";
+ if(STRINGEQ(uc, @"css")) return @"application/x-pointplus";
+ if(STRINGEQ(uc, @"css")) return @"text/css";
+ if(STRINGEQ(uc, @"cxx")) return @"text/plain";
+ if(STRINGEQ(uc, @"dcr")) return @"application/x-director";
+ if(STRINGEQ(uc, @"deepv")) return @"application/x-deepv";
+ if(STRINGEQ(uc, @"def")) return @"text/plain";
+ if(STRINGEQ(uc, @"der")) return @"application/x-x509-ca-cert";
+ if(STRINGEQ(uc, @"dif")) return @"video/x-dv";
+ if(STRINGEQ(uc, @"dir")) return @"application/x-director";
+ if(STRINGEQ(uc, @"dl")) return @"video/dl";
+ if(STRINGEQ(uc, @"dl")) return @"video/x-dl";
+ if(STRINGEQ(uc, @"doc")) return @"application/msword";
+ if(STRINGEQ(uc, @"dot")) return @"application/msword";
+ if(STRINGEQ(uc, @"dp")) return @"application/commonground";
+ if(STRINGEQ(uc, @"drw")) return @"application/drafting";
+ if(STRINGEQ(uc, @"dump")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"dv")) return @"video/x-dv";
+ if(STRINGEQ(uc, @"dvi")) return @"application/x-dvi";
+ if(STRINGEQ(uc, @"dwf")) return @"drawing/x-dwf (old)";
+ if(STRINGEQ(uc, @"dwf")) return @"model/vnd.dwf";
+ if(STRINGEQ(uc, @"dwg")) return @"application/acad";
+ if(STRINGEQ(uc, @"dwg")) return @"image/vnd.dwg";
+ if(STRINGEQ(uc, @"dwg")) return @"image/x-dwg";
+ if(STRINGEQ(uc, @"dxf")) return @"application/dxf";
+ if(STRINGEQ(uc, @"dxf")) return @"image/vnd.dwg";
+ if(STRINGEQ(uc, @"dxf")) return @"image/x-dwg";
+ if(STRINGEQ(uc, @"dxr")) return @"application/x-director";
+ if(STRINGEQ(uc, @"el")) return @"text/x-script.elisp";
+ if(STRINGEQ(uc, @"elc")) return @"application/x-bytecode.elisp (compiled elisp)";
+ if(STRINGEQ(uc, @"elc")) return @"application/x-elc";
+ if(STRINGEQ(uc, @"env")) return @"application/x-envoy";
+ if(STRINGEQ(uc, @"eps")) return @"application/postscript";
+ if(STRINGEQ(uc, @"es")) return @"application/x-esrehber";
+ if(STRINGEQ(uc, @"etx")) return @"text/x-setext";
+ if(STRINGEQ(uc, @"evy")) return @"application/envoy";
+ if(STRINGEQ(uc, @"evy")) return @"application/x-envoy";
+ if(STRINGEQ(uc, @"exe")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"f")) return @"text/plain";
+ if(STRINGEQ(uc, @"f")) return @"text/x-fortran";
+ if(STRINGEQ(uc, @"f77")) return @"text/x-fortran";
+ if(STRINGEQ(uc, @"f90")) return @"text/plain";
+ if(STRINGEQ(uc, @"f90")) return @"text/x-fortran";
+ if(STRINGEQ(uc, @"fdf")) return @"application/vnd.fdf";
+ if(STRINGEQ(uc, @"fif")) return @"application/fractals";
+ if(STRINGEQ(uc, @"fif")) return @"image/fif";
+ if(STRINGEQ(uc, @"fli")) return @"video/fli";
+ if(STRINGEQ(uc, @"fli")) return @"video/x-fli";
+ if(STRINGEQ(uc, @"flo")) return @"image/florian";
+ if(STRINGEQ(uc, @"flx")) return @"text/vnd.fmi.flexstor";
+ if(STRINGEQ(uc, @"fmf")) return @"video/x-atomic3d-feature";
+ if(STRINGEQ(uc, @"for")) return @"text/plain";
+ if(STRINGEQ(uc, @"for")) return @"text/x-fortran";
+ if(STRINGEQ(uc, @"fpx")) return @"image/vnd.fpx";
+ if(STRINGEQ(uc, @"fpx")) return @"image/vnd.net-fpx";
+ if(STRINGEQ(uc, @"frl")) return @"application/freeloader";
+ if(STRINGEQ(uc, @"funk")) return @"audio/make";
+ if(STRINGEQ(uc, @"g")) return @"text/plain";
+ if(STRINGEQ(uc, @"g3")) return @"image/g3fax";
+ if(STRINGEQ(uc, @"gif")) return @"image/gif";
+ if(STRINGEQ(uc, @"gl")) return @"video/gl";
+ if(STRINGEQ(uc, @"gl")) return @"video/x-gl";
+ if(STRINGEQ(uc, @"gsd")) return @"audio/x-gsm";
+ if(STRINGEQ(uc, @"gsm")) return @"audio/x-gsm";
+ if(STRINGEQ(uc, @"gsp")) return @"application/x-gsp";
+ if(STRINGEQ(uc, @"gss")) return @"application/x-gss";
+ if(STRINGEQ(uc, @"gtar")) return @"application/x-gtar";
+ if(STRINGEQ(uc, @"gz")) return @"application/x-compressed";
+ if(STRINGEQ(uc, @"gz")) return @"application/x-gzip";
+ if(STRINGEQ(uc, @"gzip")) return @"application/x-gzip";
+ if(STRINGEQ(uc, @"gzip")) return @"multipart/x-gzip";
+ if(STRINGEQ(uc, @"h")) return @"text/plain";
+ if(STRINGEQ(uc, @"h")) return @"text/x-h";
+ if(STRINGEQ(uc, @"hdf")) return @"application/x-hdf";
+ if(STRINGEQ(uc, @"help")) return @"application/x-helpfile";
+ if(STRINGEQ(uc, @"hgl")) return @"application/vnd.hp-hpgl";
+ if(STRINGEQ(uc, @"hh")) return @"text/plain";
+ if(STRINGEQ(uc, @"hh")) return @"text/x-h";
+ if(STRINGEQ(uc, @"hlb")) return @"text/x-script";
+ if(STRINGEQ(uc, @"hlp")) return @"application/hlp";
+ if(STRINGEQ(uc, @"hlp")) return @"application/x-helpfile";
+ if(STRINGEQ(uc, @"hlp")) return @"application/x-winhelp";
+ if(STRINGEQ(uc, @"hpg")) return @"application/vnd.hp-hpgl";
+ if(STRINGEQ(uc, @"hpgl")) return @"application/vnd.hp-hpgl";
+ if(STRINGEQ(uc, @"hqx")) return @"application/binhex";
+ if(STRINGEQ(uc, @"hqx")) return @"application/binhex4";
+ if(STRINGEQ(uc, @"hqx")) return @"application/mac-binhex";
+ if(STRINGEQ(uc, @"hqx")) return @"application/mac-binhex40";
+ if(STRINGEQ(uc, @"hqx")) return @"application/x-binhex40";
+ if(STRINGEQ(uc, @"hqx")) return @"application/x-mac-binhex40";
+ if(STRINGEQ(uc, @"hta")) return @"application/hta";
+ if(STRINGEQ(uc, @"htc")) return @"text/x-component";
+ if(STRINGEQ(uc, @"htm")) return @"text/html";
+ if(STRINGEQ(uc, @"html")) return @"text/html";
+ if(STRINGEQ(uc, @"htmls")) return @"text/html";
+ if(STRINGEQ(uc, @"htt")) return @"text/webviewhtml";
+ if(STRINGEQ(uc, @"htx")) return @"text/html";
+ if(STRINGEQ(uc, @"ice")) return @"x-conference/x-cooltalk";
+ if(STRINGEQ(uc, @"ico")) return @"image/x-icon";
+ if(STRINGEQ(uc, @"idc")) return @"text/plain";
+ if(STRINGEQ(uc, @"ief")) return @"image/ief";
+ if(STRINGEQ(uc, @"iefs")) return @"image/ief";
+ if(STRINGEQ(uc, @"iges")) return @"application/iges";
+ if(STRINGEQ(uc, @"iges")) return @"model/iges";
+ if(STRINGEQ(uc, @"igs")) return @"application/iges";
+ if(STRINGEQ(uc, @"igs")) return @"model/iges";
+ if(STRINGEQ(uc, @"ima")) return @"application/x-ima";
+ if(STRINGEQ(uc, @"imap")) return @"application/x-httpd-imap";
+ if(STRINGEQ(uc, @"inf")) return @"application/inf";
+ if(STRINGEQ(uc, @"ins")) return @"application/x-internett-signup";
+ if(STRINGEQ(uc, @"ip")) return @"application/x-ip2";
+ if(STRINGEQ(uc, @"isu")) return @"video/x-isvideo";
+ if(STRINGEQ(uc, @"it")) return @"audio/it";
+ if(STRINGEQ(uc, @"iv")) return @"application/x-inventor";
+ if(STRINGEQ(uc, @"ivr")) return @"i-world/i-vrml";
+ if(STRINGEQ(uc, @"ivy")) return @"application/x-livescreen";
+ if(STRINGEQ(uc, @"jam")) return @"audio/x-jam";
+ if(STRINGEQ(uc, @"jav")) return @"text/plain";
+ if(STRINGEQ(uc, @"jav")) return @"text/x-java-source";
+ if(STRINGEQ(uc, @"java")) return @"text/plain";
+ if(STRINGEQ(uc, @"java")) return @"text/x-java-source";
+ if(STRINGEQ(uc, @"jcm")) return @"application/x-java-commerce";
+ if(STRINGEQ(uc, @"jfif")) return @"image/jpeg";
+ if(STRINGEQ(uc, @"jfif")) return @"image/pjpeg";
+ if(STRINGEQ(uc, @"jfif-tbnl")) return @"image/jpeg";
+ if(STRINGEQ(uc, @"jpe")) return @"image/jpeg";
+ if(STRINGEQ(uc, @"jpe")) return @"image/pjpeg";
+ if(STRINGEQ(uc, @"jpeg")) return @"image/jpeg";
+ if(STRINGEQ(uc, @"jpeg")) return @"image/pjpeg";
+ if(STRINGEQ(uc, @"jpg")) return @"image/jpeg";
+ if(STRINGEQ(uc, @"thm")) return @"image/jpeg";
+ if(STRINGEQ(uc, @"jpg")) return @"image/pjpeg";
+ if(STRINGEQ(uc, @"jps")) return @"image/x-jps";
+ if(STRINGEQ(uc, @"js")) return @"application/x-javascript";
+ if(STRINGEQ(uc, @"jut")) return @"image/jutvision";
+ if(STRINGEQ(uc, @"kar")) return @"audio/midi";
+ if(STRINGEQ(uc, @"kar")) return @"music/x-karaoke";
+ if(STRINGEQ(uc, @"ksh")) return @"application/x-ksh";
+ if(STRINGEQ(uc, @"ksh")) return @"text/x-script.ksh";
+ if(STRINGEQ(uc, @"la")) return @"audio/nspaudio";
+ if(STRINGEQ(uc, @"la")) return @"audio/x-nspaudio";
+ if(STRINGEQ(uc, @"lam")) return @"audio/x-liveaudio";
+ if(STRINGEQ(uc, @"latex")) return @"application/x-latex";
+ if(STRINGEQ(uc, @"lha")) return @"application/lha";
+ if(STRINGEQ(uc, @"lha")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"lha")) return @"application/x-lha";
+ if(STRINGEQ(uc, @"lhx")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"list")) return @"text/plain";
+ if(STRINGEQ(uc, @"lma")) return @"audio/nspaudio";
+ if(STRINGEQ(uc, @"lma")) return @"audio/x-nspaudio";
+ if(STRINGEQ(uc, @"log")) return @"text/plain";
+ if(STRINGEQ(uc, @"lsp")) return @"application/x-lisp";
+ if(STRINGEQ(uc, @"lsp")) return @"text/x-script.lisp";
+ if(STRINGEQ(uc, @"lst")) return @"text/plain";
+ if(STRINGEQ(uc, @"lsx")) return @"text/x-la-asf";
+ if(STRINGEQ(uc, @"ltx")) return @"application/x-latex";
+ if(STRINGEQ(uc, @"lzh")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"lzh")) return @"application/x-lzh";
+ if(STRINGEQ(uc, @"lzx")) return @"application/lzx";
+ if(STRINGEQ(uc, @"lzx")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"lzx")) return @"application/x-lzx";
+ if(STRINGEQ(uc, @"m")) return @"text/plain";
+ if(STRINGEQ(uc, @"m")) return @"text/x-m";
+ if(STRINGEQ(uc, @"m1v")) return @"video/mpeg";
+ if(STRINGEQ(uc, @"m2a")) return @"audio/mpeg";
+ if(STRINGEQ(uc, @"m2v")) return @"video/mpeg";
+ if(STRINGEQ(uc, @"m3u")) return @"audio/x-mpequrl";
+ if(STRINGEQ(uc, @"man")) return @"application/x-troff-man";
+ if(STRINGEQ(uc, @"map")) return @"application/x-navimap";
+ if(STRINGEQ(uc, @"mar")) return @"text/plain";
+ if(STRINGEQ(uc, @"mbd")) return @"application/mbedlet";
+ if(STRINGEQ(uc, @"mc$")) return @"application/x-magic-cap-package-1.0";
+ if(STRINGEQ(uc, @"mcd")) return @"application/mcad";
+ if(STRINGEQ(uc, @"mcd")) return @"application/x-mathcad";
+ if(STRINGEQ(uc, @"mcf")) return @"image/vasa";
+ if(STRINGEQ(uc, @"mcf")) return @"text/mcf";
+ if(STRINGEQ(uc, @"mcp")) return @"application/netmc";
+ if(STRINGEQ(uc, @"me")) return @"application/x-troff-me";
+ if(STRINGEQ(uc, @"mht")) return @"message/rfc822";
+ if(STRINGEQ(uc, @"mhtml")) return @"message/rfc822";
+ if(STRINGEQ(uc, @"mid")) return @"application/x-midi";
+ if(STRINGEQ(uc, @"mid")) return @"audio/midi";
+ if(STRINGEQ(uc, @"mid")) return @"audio/x-mid";
+ if(STRINGEQ(uc, @"mid")) return @"audio/x-midi";
+ if(STRINGEQ(uc, @"mid")) return @"music/crescendo";
+ if(STRINGEQ(uc, @"mid")) return @"x-music/x-midi";
+ if(STRINGEQ(uc, @"midi")) return @"application/x-midi";
+ if(STRINGEQ(uc, @"midi")) return @"audio/midi";
+ if(STRINGEQ(uc, @"midi")) return @"audio/x-mid";
+ if(STRINGEQ(uc, @"midi")) return @"audio/x-midi";
+ if(STRINGEQ(uc, @"midi")) return @"music/crescendo";
+ if(STRINGEQ(uc, @"midi")) return @"x-music/x-midi";
+ if(STRINGEQ(uc, @"mif")) return @"application/x-frame";
+ if(STRINGEQ(uc, @"mif")) return @"application/x-mif";
+ if(STRINGEQ(uc, @"mime")) return @"message/rfc822";
+ if(STRINGEQ(uc, @"mime")) return @"www/mime";
+ if(STRINGEQ(uc, @"mjf")) return @"audio/x-vnd.audioexplosion.mjuicemediafile";
+ if(STRINGEQ(uc, @"mjpg")) return @"video/x-motion-jpeg";
+ if(STRINGEQ(uc, @"mm")) return @"application/base64";
+ if(STRINGEQ(uc, @"mm")) return @"application/x-meme";
+ if(STRINGEQ(uc, @"mme")) return @"application/base64";
+ if(STRINGEQ(uc, @"mod")) return @"audio/mod";
+ if(STRINGEQ(uc, @"mod")) return @"audio/x-mod";
+ if(STRINGEQ(uc, @"moov")) return @"video/quicktime";
+ if(STRINGEQ(uc, @"mov")) return @"video/quicktime";
+ if(STRINGEQ(uc, @"movie")) return @"video/x-sgi-movie";
+ if(STRINGEQ(uc, @"mp2")) return @"audio/mpeg";
+ if(STRINGEQ(uc, @"mp2")) return @"audio/x-mpeg";
+ if(STRINGEQ(uc, @"mp2")) return @"video/mpeg";
+ if(STRINGEQ(uc, @"mp2")) return @"video/x-mpeg";
+ if(STRINGEQ(uc, @"mp2")) return @"video/x-mpeq2a";
+ if(STRINGEQ(uc, @"mp3")) return @"audio/mpeg3";
+ if(STRINGEQ(uc, @"mp3")) return @"audio/x-mpeg-3";
+ if(STRINGEQ(uc, @"mp3")) return @"video/mpeg";
+ if(STRINGEQ(uc, @"mp3")) return @"video/x-mpeg";
+ if(STRINGEQ(uc, @"mpa")) return @"audio/mpeg";
+ if(STRINGEQ(uc, @"mpa")) return @"video/mpeg";
+ if(STRINGEQ(uc, @"mpc")) return @"application/x-project";
+ if(STRINGEQ(uc, @"mpe")) return @"video/mpeg";
+ if(STRINGEQ(uc, @"mpeg")) return @"video/mpeg";
+ if(STRINGEQ(uc, @"mpg")) return @"audio/mpeg";
+ if(STRINGEQ(uc, @"mpg")) return @"video/mpeg";
+ if(STRINGEQ(uc, @"mpga")) return @"audio/mpeg";
+ if(STRINGEQ(uc, @"mpp")) return @"application/vnd.ms-project";
+ if(STRINGEQ(uc, @"mpt")) return @"application/x-project";
+ if(STRINGEQ(uc, @"mpv")) return @"application/x-project";
+ if(STRINGEQ(uc, @"mpx")) return @"application/x-project";
+ if(STRINGEQ(uc, @"mrc")) return @"application/marc";
+ if(STRINGEQ(uc, @"ms")) return @"application/x-troff-ms";
+ if(STRINGEQ(uc, @"mv")) return @"video/x-sgi-movie";
+ if(STRINGEQ(uc, @"my")) return @"audio/make";
+ if(STRINGEQ(uc, @"mzz")) return @"application/x-vnd.audioexplosion.mzz";
+ if(STRINGEQ(uc, @"nap")) return @"image/naplps";
+ if(STRINGEQ(uc, @"naplps")) return @"image/naplps";
+ if(STRINGEQ(uc, @"nc")) return @"application/x-netcdf";
+ if(STRINGEQ(uc, @"ncm")) return @"application/vnd.nokia.configuration-message";
+ if(STRINGEQ(uc, @"nif")) return @"image/x-niff";
+ if(STRINGEQ(uc, @"niff")) return @"image/x-niff";
+ if(STRINGEQ(uc, @"nix")) return @"application/x-mix-transfer";
+ if(STRINGEQ(uc, @"nsc")) return @"application/x-conference";
+ if(STRINGEQ(uc, @"nvd")) return @"application/x-navidoc";
+ if(STRINGEQ(uc, @"o")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"oda")) return @"application/oda";
+ if(STRINGEQ(uc, @"omc")) return @"application/x-omc";
+ if(STRINGEQ(uc, @"omcd")) return @"application/x-omcdatamaker";
+ if(STRINGEQ(uc, @"omcr")) return @"application/x-omcregerator";
+ if(STRINGEQ(uc, @"p")) return @"text/x-pascal";
+ if(STRINGEQ(uc, @"p10")) return @"application/pkcs10";
+ if(STRINGEQ(uc, @"p10")) return @"application/x-pkcs10";
+ if(STRINGEQ(uc, @"p12")) return @"application/pkcs-12";
+ if(STRINGEQ(uc, @"p12")) return @"application/x-pkcs12";
+ if(STRINGEQ(uc, @"p7a")) return @"application/x-pkcs7-signature";
+ if(STRINGEQ(uc, @"p7c")) return @"application/pkcs7-mime";
+ if(STRINGEQ(uc, @"p7c")) return @"application/x-pkcs7-mime";
+ if(STRINGEQ(uc, @"p7m")) return @"application/pkcs7-mime";
+ if(STRINGEQ(uc, @"p7m")) return @"application/x-pkcs7-mime";
+ if(STRINGEQ(uc, @"p7r")) return @"application/x-pkcs7-certreqresp";
+ if(STRINGEQ(uc, @"p7s")) return @"application/pkcs7-signature";
+ if(STRINGEQ(uc, @"part")) return @"application/pro_eng";
+ if(STRINGEQ(uc, @"pas")) return @"text/pascal";
+ if(STRINGEQ(uc, @"pbm")) return @"image/x-portable-bitmap";
+ if(STRINGEQ(uc, @"pcl")) return @"application/vnd.hp-pcl";
+ if(STRINGEQ(uc, @"pcl")) return @"application/x-pcl";
+ if(STRINGEQ(uc, @"pct")) return @"image/x-pict";
+ if(STRINGEQ(uc, @"pcx")) return @"image/x-pcx";
+ if(STRINGEQ(uc, @"pdb")) return @"chemical/x-pdb";
+ if(STRINGEQ(uc, @"pdf")) return @"application/pdf";
+ if(STRINGEQ(uc, @"pfunk")) return @"audio/make";
+ if(STRINGEQ(uc, @"pfunk")) return @"audio/make.my.funk";
+ if(STRINGEQ(uc, @"pgm")) return @"image/x-portable-graymap";
+ if(STRINGEQ(uc, @"pgm")) return @"image/x-portable-greymap";
+ if(STRINGEQ(uc, @"pic")) return @"image/pict";
+ if(STRINGEQ(uc, @"pict")) return @"image/pict";
+ if(STRINGEQ(uc, @"pkg")) return @"application/x-newton-compatible-pkg";
+ if(STRINGEQ(uc, @"pko")) return @"application/vnd.ms-pki.pko";
+ if(STRINGEQ(uc, @"pl")) return @"text/plain";
+ if(STRINGEQ(uc, @"pl")) return @"text/x-script.perl";
+ if(STRINGEQ(uc, @"plist")) return @"text/plain";
+ if(STRINGEQ(uc, @"plx")) return @"application/x-pixclscript";
+ if(STRINGEQ(uc, @"pm")) return @"image/x-xpixmap";
+ if(STRINGEQ(uc, @"pm")) return @"text/x-script.perl-module";
+ if(STRINGEQ(uc, @"pm4")) return @"application/x-pagemaker";
+ if(STRINGEQ(uc, @"pm5")) return @"application/x-pagemaker";
+ if(STRINGEQ(uc, @"png")) return @"image/png";
+ if(STRINGEQ(uc, @"pnm")) return @"application/x-portable-anymap";
+ if(STRINGEQ(uc, @"pnm")) return @"image/x-portable-anymap";
+ if(STRINGEQ(uc, @"pot")) return @"application/mspowerpoint";
+ if(STRINGEQ(uc, @"pot")) return @"application/vnd.ms-powerpoint";
+ if(STRINGEQ(uc, @"pov")) return @"model/x-pov";
+ if(STRINGEQ(uc, @"ppa")) return @"application/vnd.ms-powerpoint";
+ if(STRINGEQ(uc, @"ppm")) return @"image/x-portable-pixmap";
+ if(STRINGEQ(uc, @"pps")) return @"application/mspowerpoint";
+ if(STRINGEQ(uc, @"pps")) return @"application/vnd.ms-powerpoint";
+ if(STRINGEQ(uc, @"ppt")) return @"application/mspowerpoint";
+ if(STRINGEQ(uc, @"ppt")) return @"application/powerpoint";
+ if(STRINGEQ(uc, @"ppt")) return @"application/vnd.ms-powerpoint";
+ if(STRINGEQ(uc, @"ppt")) return @"application/x-mspowerpoint";
+ if(STRINGEQ(uc, @"ppz")) return @"application/mspowerpoint";
+ if(STRINGEQ(uc, @"pre")) return @"application/x-freelance";
+ if(STRINGEQ(uc, @"prt")) return @"application/pro_eng";
+ if(STRINGEQ(uc, @"ps")) return @"application/postscript";
+ if(STRINGEQ(uc, @"psd")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"pvu")) return @"paleovu/x-pv";
+ if(STRINGEQ(uc, @"pwz")) return @"application/vnd.ms-powerpoint";
+ if(STRINGEQ(uc, @"py")) return @"text/x-script.phyton";
+ if(STRINGEQ(uc, @"pyc")) return @"applicaiton/x-bytecode.python";
+ if(STRINGEQ(uc, @"qcp")) return @"audio/vnd.qcelp";
+ if(STRINGEQ(uc, @"qd3")) return @"x-world/x-3dmf";
+ if(STRINGEQ(uc, @"qd3d")) return @"x-world/x-3dmf";
+ if(STRINGEQ(uc, @"qif")) return @"image/x-quicktime";
+ if(STRINGEQ(uc, @"qt")) return @"video/quicktime";
+ if(STRINGEQ(uc, @"qtc")) return @"video/x-qtc";
+ if(STRINGEQ(uc, @"qti")) return @"image/x-quicktime";
+ if(STRINGEQ(uc, @"qtif")) return @"image/x-quicktime";
+ if(STRINGEQ(uc, @"ra")) return @"audio/x-pn-realaudio";
+ if(STRINGEQ(uc, @"ra")) return @"audio/x-pn-realaudio-plugin";
+ if(STRINGEQ(uc, @"ra")) return @"audio/x-realaudio";
+ if(STRINGEQ(uc, @"ram")) return @"audio/x-pn-realaudio";
+ if(STRINGEQ(uc, @"ras")) return @"application/x-cmu-raster";
+ if(STRINGEQ(uc, @"ras")) return @"image/cmu-raster";
+ if(STRINGEQ(uc, @"ras")) return @"image/x-cmu-raster";
+ if(STRINGEQ(uc, @"rast")) return @"image/cmu-raster";
+ if(STRINGEQ(uc, @"rexx")) return @"text/x-script.rexx";
+ if(STRINGEQ(uc, @"rf")) return @"image/vnd.rn-realflash";
+ if(STRINGEQ(uc, @"rgb")) return @"image/x-rgb";
+ if(STRINGEQ(uc, @"rm")) return @"application/vnd.rn-realmedia";
+ if(STRINGEQ(uc, @"rm")) return @"audio/x-pn-realaudio";
+ if(STRINGEQ(uc, @"rmi")) return @"audio/mid";
+ if(STRINGEQ(uc, @"rmm")) return @"audio/x-pn-realaudio";
+ if(STRINGEQ(uc, @"rmp")) return @"audio/x-pn-realaudio";
+ if(STRINGEQ(uc, @"rmp")) return @"audio/x-pn-realaudio-plugin";
+ if(STRINGEQ(uc, @"rng")) return @"application/ringing-tones";
+ if(STRINGEQ(uc, @"rng")) return @"application/vnd.nokia.ringing-tone";
+ if(STRINGEQ(uc, @"rnx")) return @"application/vnd.rn-realplayer";
+ if(STRINGEQ(uc, @"roff")) return @"application/x-troff";
+ if(STRINGEQ(uc, @"rp")) return @"image/vnd.rn-realpix";
+ if(STRINGEQ(uc, @"rpm")) return @"audio/x-pn-realaudio-plugin";
+ if(STRINGEQ(uc, @"rt")) return @"text/richtext";
+ if(STRINGEQ(uc, @"rt")) return @"text/vnd.rn-realtext";
+ if(STRINGEQ(uc, @"rtf")) return @"application/rtf";
+ if(STRINGEQ(uc, @"rtf")) return @"application/x-rtf";
+ if(STRINGEQ(uc, @"rtf")) return @"text/richtext";
+ if(STRINGEQ(uc, @"rtx")) return @"application/rtf";
+ if(STRINGEQ(uc, @"rtx")) return @"text/richtext";
+ if(STRINGEQ(uc, @"rv")) return @"video/vnd.rn-realvideo";
+ if(STRINGEQ(uc, @"s")) return @"text/x-asm";
+ if(STRINGEQ(uc, @"s3m")) return @"audio/s3m";
+ if(STRINGEQ(uc, @"saveme")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"sbk")) return @"application/x-tbook";
+ if(STRINGEQ(uc, @"scm")) return @"application/x-lotusscreencam";
+ if(STRINGEQ(uc, @"scm")) return @"text/x-script.guile";
+ if(STRINGEQ(uc, @"scm")) return @"text/x-script.scheme";
+ if(STRINGEQ(uc, @"scm")) return @"video/x-scm";
+ if(STRINGEQ(uc, @"sdml")) return @"text/plain";
+ if(STRINGEQ(uc, @"sdp")) return @"application/sdp";
+ if(STRINGEQ(uc, @"sdp")) return @"application/x-sdp";
+ if(STRINGEQ(uc, @"sdr")) return @"application/sounder";
+ if(STRINGEQ(uc, @"sea")) return @"application/sea";
+ if(STRINGEQ(uc, @"sea")) return @"application/x-sea";
+ if(STRINGEQ(uc, @"set")) return @"application/set";
+ if(STRINGEQ(uc, @"sgm")) return @"text/sgml";
+ if(STRINGEQ(uc, @"sgm")) return @"text/x-sgml";
+ if(STRINGEQ(uc, @"sgml")) return @"text/sgml";
+ if(STRINGEQ(uc, @"sgml")) return @"text/x-sgml";
+ if(STRINGEQ(uc, @"sh")) return @"application/x-bsh";
+ if(STRINGEQ(uc, @"sh")) return @"application/x-sh";
+ if(STRINGEQ(uc, @"sh")) return @"application/x-shar";
+ if(STRINGEQ(uc, @"sh")) return @"text/x-script.sh";
+ if(STRINGEQ(uc, @"shar")) return @"application/x-bsh";
+ if(STRINGEQ(uc, @"shar")) return @"application/x-shar";
+ if(STRINGEQ(uc, @"shtml")) return @"text/html";
+ if(STRINGEQ(uc, @"shtml")) return @"text/x-server-parsed-html";
+ if(STRINGEQ(uc, @"sid")) return @"audio/x-psid";
+ if(STRINGEQ(uc, @"sit")) return @"application/x-sit";
+ if(STRINGEQ(uc, @"sit")) return @"application/x-stuffit";
+ if(STRINGEQ(uc, @"skd")) return @"application/x-koan";
+ if(STRINGEQ(uc, @"skm")) return @"application/x-koan";
+ if(STRINGEQ(uc, @"skp")) return @"application/x-koan";
+ if(STRINGEQ(uc, @"skt")) return @"application/x-koan";
+ if(STRINGEQ(uc, @"sl")) return @"application/x-seelogo";
+ if(STRINGEQ(uc, @"smi")) return @"application/smil";
+ if(STRINGEQ(uc, @"smil")) return @"application/smil";
+ if(STRINGEQ(uc, @"snd")) return @"audio/basic";
+ if(STRINGEQ(uc, @"snd")) return @"audio/x-adpcm";
+ if(STRINGEQ(uc, @"sol")) return @"application/solids";
+ if(STRINGEQ(uc, @"spc")) return @"application/x-pkcs7-certificates";
+ if(STRINGEQ(uc, @"spc")) return @"text/x-speech";
+ if(STRINGEQ(uc, @"spl")) return @"application/futuresplash";
+ if(STRINGEQ(uc, @"spr")) return @"application/x-sprite";
+ if(STRINGEQ(uc, @"sprite")) return @"application/x-sprite";
+ if(STRINGEQ(uc, @"src")) return @"application/x-wais-source";
+ if(STRINGEQ(uc, @"ssi")) return @"text/x-server-parsed-html";
+ if(STRINGEQ(uc, @"ssm")) return @"application/streamingmedia";
+ if(STRINGEQ(uc, @"sst")) return @"application/vnd.ms-pki.certstore";
+ if(STRINGEQ(uc, @"step")) return @"application/step";
+ if(STRINGEQ(uc, @"stl")) return @"application/sla";
+ if(STRINGEQ(uc, @"stl")) return @"application/vnd.ms-pki.stl";
+ if(STRINGEQ(uc, @"stl")) return @"application/x-navistyle";
+ if(STRINGEQ(uc, @"stp")) return @"application/step";
+ if(STRINGEQ(uc, @"sv4cpio")) return @"application/x-sv4cpio";
+ if(STRINGEQ(uc, @"sv4crc")) return @"application/x-sv4crc";
+ if(STRINGEQ(uc, @"svf")) return @"image/vnd.dwg";
+ if(STRINGEQ(uc, @"svf")) return @"image/x-dwg";
+ if(STRINGEQ(uc, @"svr")) return @"application/x-world";
+ if(STRINGEQ(uc, @"svr")) return @"x-world/x-svr";
+ if(STRINGEQ(uc, @"swf")) return @"application/x-shockwave-flash";
+ if(STRINGEQ(uc, @"t")) return @"application/x-troff";
+ if(STRINGEQ(uc, @"talk")) return @"text/x-speech";
+ if(STRINGEQ(uc, @"tar")) return @"application/x-tar";
+ if(STRINGEQ(uc, @"tbk")) return @"application/toolbook";
+ if(STRINGEQ(uc, @"tbk")) return @"application/x-tbook";
+ if(STRINGEQ(uc, @"tcl")) return @"application/x-tcl";
+ if(STRINGEQ(uc, @"tcl")) return @"text/x-script.tcl";
+ if(STRINGEQ(uc, @"tcsh")) return @"text/x-script.tcsh";
+ if(STRINGEQ(uc, @"tex")) return @"application/x-tex";
+ if(STRINGEQ(uc, @"texi")) return @"application/x-texinfo";
+ if(STRINGEQ(uc, @"texinfo")) return @"application/x-texinfo";
+ if(STRINGEQ(uc, @"text")) return @"application/plain";
+ if(STRINGEQ(uc, @"text")) return @"text/plain";
+ if(STRINGEQ(uc, @"tgz")) return @"application/gnutar";
+ if(STRINGEQ(uc, @"tgz")) return @"application/x-compressed";
+ if(STRINGEQ(uc, @"tif")) return @"image/tiff";
+ if(STRINGEQ(uc, @"tif")) return @"image/x-tiff";
+ if(STRINGEQ(uc, @"tiff")) return @"image/tiff";
+ if(STRINGEQ(uc, @"tiff")) return @"image/x-tiff";
+ if(STRINGEQ(uc, @"tr")) return @"application/x-troff";
+ if(STRINGEQ(uc, @"tsi")) return @"audio/tsp-audio";
+ if(STRINGEQ(uc, @"tsp")) return @"application/dsptype";
+ if(STRINGEQ(uc, @"tsp")) return @"audio/tsplayer";
+ if(STRINGEQ(uc, @"tsv")) return @"text/tab-separated-values";
+ if(STRINGEQ(uc, @"turbot")) return @"image/florian";
+ if(STRINGEQ(uc, @"txt")) return @"text/plain";
+ if(STRINGEQ(uc, @"uil")) return @"text/x-uil";
+ if(STRINGEQ(uc, @"uni")) return @"text/uri-list";
+ if(STRINGEQ(uc, @"unis")) return @"text/uri-list";
+ if(STRINGEQ(uc, @"unv")) return @"application/i-deas";
+ if(STRINGEQ(uc, @"uri")) return @"text/uri-list";
+ if(STRINGEQ(uc, @"uris")) return @"text/uri-list";
+ if(STRINGEQ(uc, @"ustar")) return @"application/x-ustar";
+ if(STRINGEQ(uc, @"ustar")) return @"multipart/x-ustar";
+ if(STRINGEQ(uc, @"uu")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"uu")) return @"text/x-uuencode";
+ if(STRINGEQ(uc, @"uue")) return @"text/x-uuencode";
+ if(STRINGEQ(uc, @"vcd")) return @"application/x-cdlink";
+ if(STRINGEQ(uc, @"vcs")) return @"text/x-vcalendar";
+ if(STRINGEQ(uc, @"vda")) return @"application/vda";
+ if(STRINGEQ(uc, @"vdo")) return @"video/vdo";
+ if(STRINGEQ(uc, @"vew")) return @"application/groupwise";
+ if(STRINGEQ(uc, @"viv")) return @"video/vivo";
+ if(STRINGEQ(uc, @"viv")) return @"video/vnd.vivo";
+ if(STRINGEQ(uc, @"vivo")) return @"video/vivo";
+ if(STRINGEQ(uc, @"vivo")) return @"video/vnd.vivo";
+ if(STRINGEQ(uc, @"vmd")) return @"application/vocaltec-media-desc";
+ if(STRINGEQ(uc, @"vmf")) return @"application/vocaltec-media-file";
+ if(STRINGEQ(uc, @"voc")) return @"audio/voc";
+ if(STRINGEQ(uc, @"voc")) return @"audio/x-voc";
+ if(STRINGEQ(uc, @"vos")) return @"video/vosaic";
+ if(STRINGEQ(uc, @"vox")) return @"audio/voxware";
+ if(STRINGEQ(uc, @"vqe")) return @"audio/x-twinvq-plugin";
+ if(STRINGEQ(uc, @"vqf")) return @"audio/x-twinvq";
+ if(STRINGEQ(uc, @"vql")) return @"audio/x-twinvq-plugin";
+ if(STRINGEQ(uc, @"vrml")) return @"application/x-vrml";
+ if(STRINGEQ(uc, @"vrml")) return @"model/vrml";
+ if(STRINGEQ(uc, @"vrml")) return @"x-world/x-vrml";
+ if(STRINGEQ(uc, @"vrt")) return @"x-world/x-vrt";
+ if(STRINGEQ(uc, @"vsd")) return @"application/x-visio";
+ if(STRINGEQ(uc, @"vst")) return @"application/x-visio";
+ if(STRINGEQ(uc, @"vsw")) return @"application/x-visio";
+ if(STRINGEQ(uc, @"w60")) return @"application/wordperfect6.0";
+ if(STRINGEQ(uc, @"w61")) return @"application/wordperfect6.1";
+ if(STRINGEQ(uc, @"w6w")) return @"application/msword";
+ if(STRINGEQ(uc, @"wav")) return @"audio/wav";
+ if(STRINGEQ(uc, @"wav")) return @"audio/x-wav";
+ if(STRINGEQ(uc, @"wb1")) return @"application/x-qpro";
+ if(STRINGEQ(uc, @"wbmp")) return @"image/vnd.wap.wbmp";
+ if(STRINGEQ(uc, @"web")) return @"application/vnd.xara";
+ if(STRINGEQ(uc, @"wiz")) return @"application/msword";
+ if(STRINGEQ(uc, @"wk1")) return @"application/x-123";
+ if(STRINGEQ(uc, @"wmf")) return @"windows/metafile";
+ if(STRINGEQ(uc, @"wml")) return @"text/vnd.wap.wml";
+ if(STRINGEQ(uc, @"wmlc")) return @"application/vnd.wap.wmlc";
+ if(STRINGEQ(uc, @"wmls")) return @"text/vnd.wap.wmlscript";
+ if(STRINGEQ(uc, @"wmlsc")) return @"application/vnd.wap.wmlscriptc";
+ if(STRINGEQ(uc, @"word")) return @"application/msword";
+ if(STRINGEQ(uc, @"wp")) return @"application/wordperfect";
+ if(STRINGEQ(uc, @"wp5")) return @"application/wordperfect";
+ if(STRINGEQ(uc, @"wp5")) return @"application/wordperfect6.0";
+ if(STRINGEQ(uc, @"wp6")) return @"application/wordperfect";
+ if(STRINGEQ(uc, @"wpd")) return @"application/wordperfect";
+ if(STRINGEQ(uc, @"wpd")) return @"application/x-wpwin";
+ if(STRINGEQ(uc, @"wq1")) return @"application/x-lotus";
+ if(STRINGEQ(uc, @"wri")) return @"application/mswrite";
+ if(STRINGEQ(uc, @"wri")) return @"application/x-wri";
+ if(STRINGEQ(uc, @"wrl")) return @"application/x-world";
+ if(STRINGEQ(uc, @"wrl")) return @"model/vrml";
+ if(STRINGEQ(uc, @"wrl")) return @"x-world/x-vrml";
+ if(STRINGEQ(uc, @"wrz")) return @"model/vrml";
+ if(STRINGEQ(uc, @"wrz")) return @"x-world/x-vrml";
+ if(STRINGEQ(uc, @"wsc")) return @"text/scriplet";
+ if(STRINGEQ(uc, @"wsrc")) return @"application/x-wais-source";
+ if(STRINGEQ(uc, @"wtk")) return @"application/x-wintalk";
+ if(STRINGEQ(uc, @"xbm")) return @"image/x-xbitmap";
+ if(STRINGEQ(uc, @"xbm")) return @"image/x-xbm";
+ if(STRINGEQ(uc, @"xbm")) return @"image/xbm";
+ if(STRINGEQ(uc, @"xdr")) return @"video/x-amt-demorun";
+ if(STRINGEQ(uc, @"xgz")) return @"xgl/drawing";
+ if(STRINGEQ(uc, @"xif")) return @"image/vnd.xiff";
+ if(STRINGEQ(uc, @"xl")) return @"application/excel";
+ if(STRINGEQ(uc, @"xla")) return @"application/excel";
+ if(STRINGEQ(uc, @"xla")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xla")) return @"application/x-msexcel";
+ if(STRINGEQ(uc, @"xlb")) return @"application/excel";
+ if(STRINGEQ(uc, @"xlb")) return @"application/vnd.ms-excel";
+ if(STRINGEQ(uc, @"xlb")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xlc")) return @"application/excel";
+ if(STRINGEQ(uc, @"xlc")) return @"application/vnd.ms-excel";
+ if(STRINGEQ(uc, @"xlc")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xld")) return @"application/excel";
+ if(STRINGEQ(uc, @"xld")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xlk")) return @"application/excel";
+ if(STRINGEQ(uc, @"xlk")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xll")) return @"application/excel";
+ if(STRINGEQ(uc, @"xll")) return @"application/vnd.ms-excel";
+ if(STRINGEQ(uc, @"xll")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xlm")) return @"application/excel";
+ if(STRINGEQ(uc, @"xlm")) return @"application/vnd.ms-excel";
+ if(STRINGEQ(uc, @"xlm")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xls")) return @"application/excel";
+ if(STRINGEQ(uc, @"xls")) return @"application/vnd.ms-excel";
+ if(STRINGEQ(uc, @"xls")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xls")) return @"application/x-msexcel";
+ if(STRINGEQ(uc, @"xlt")) return @"application/excel";
+ if(STRINGEQ(uc, @"xlt")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xlv")) return @"application/excel";
+ if(STRINGEQ(uc, @"xlv")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xlw")) return @"application/excel";
+ if(STRINGEQ(uc, @"xlw")) return @"application/vnd.ms-excel";
+ if(STRINGEQ(uc, @"xlw")) return @"application/x-excel";
+ if(STRINGEQ(uc, @"xlw")) return @"application/x-msexcel";
+ if(STRINGEQ(uc, @"xm")) return @"audio/xm";
+ if(STRINGEQ(uc, @"xml")) return @"application/xml";
+ if(STRINGEQ(uc, @"xml")) return @"text/xml";
+ if(STRINGEQ(uc, @"xmz")) return @"xgl/movie";
+ if(STRINGEQ(uc, @"xpix")) return @"application/x-vnd.ls-xpix";
+ if(STRINGEQ(uc, @"xpm")) return @"image/x-xpixmap";
+ if(STRINGEQ(uc, @"xpm")) return @"image/xpm";
+ if(STRINGEQ(uc, @"x-png")) return @"image/png";
+ if(STRINGEQ(uc, @"xsr")) return @"video/x-amt-showrun";
+ if(STRINGEQ(uc, @"xwd")) return @"image/x-xwd";
+ if(STRINGEQ(uc, @"xwd")) return @"image/x-xwindowdump";
+ if(STRINGEQ(uc, @"xyz")) return @"chemical/x-pdb";
+ if(STRINGEQ(uc, @"z")) return @"application/x-compress";
+ if(STRINGEQ(uc, @"z")) return @"application/x-compressed";
+ if(STRINGEQ(uc, @"zip")) return @"application/x-compressed";
+ if(STRINGEQ(uc, @"zip")) return @"application/x-zip-compressed";
+ if(STRINGEQ(uc, @"zip")) return @"application/zip";
+ if(STRINGEQ(uc, @"zip")) return @"multipart/x-zip";
+ if(STRINGEQ(uc, @"zoo")) return @"application/octet-stream";
+ if(STRINGEQ(uc, @"zsh")) return @"text/x-script.zsh";
+ return @"unknown/unknown";
+}
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper.h b/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper.h
new file mode 100644
index 0000000..a180d2c
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper.h
@@ -0,0 +1,9 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+
+NSString *mimeForExtension(NSString *extension);
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper.m b/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper.m
new file mode 100644
index 0000000..5f18ad5
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/MIMEHelper.m
@@ -0,0 +1,49 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import "MIMEHelper.h"
+
+#define STRINGEQ(X,Y) ([X caseInsensitiveCompare:Y] == NSOrderedSame)
+
+static NSDictionary *mimeTypes;
+
+void initializeMimeTypeDictionary()
+{
+ NSError *error;
+ NSString *mimefile = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ApacheMIMETypes" ofType:@"txt"] encoding:NSUTF8StringEncoding error:&error];
+ if (!mimefile)
+ {
+ NSLog(@"Could not read in mime type file: %@", error.localizedFailureReason);
+ return;
+ }
+
+ NSMutableDictionary *dict = [NSMutableDictionary dictionary];
+
+ NSArray *lines = [mimefile componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
+
+ for (NSString *eachLine in lines)
+ {
+ NSString *line = [eachLine stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+ if (line.length < 2) continue;
+ if ([line hasPrefix:@"#"]) continue;
+ NSArray *items = [line componentsSeparatedByString:@"\t"];
+ if (items.count < 2) continue;
+
+ NSString *mimeType = [items objectAtIndex:0];
+ NSArray *extensions = [[items lastObject] componentsSeparatedByString:@" "];
+ for (NSString *extension in extensions)
+ dict[extension] = mimeType;
+ }
+
+ mimeTypes = dict;
+}
+
+NSString *mimeForExtension(NSString *extension)
+{
+ if (!mimeTypes)
+ initializeMimeTypeDictionary();
+ return mimeTypes[[extension lowercaseString]];
+}
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/UTIHelper.h b/C02 - Documents (Take 2)/01 - UTI Utilities/UTIHelper.h
new file mode 100644
index 0000000..4f127c4
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/UTIHelper.h
@@ -0,0 +1,29 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 5.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import
+
+NSString *uuid();
+
+NSString *preferredExtensionForUTI(NSString *aUTI);
+NSString *preferredMimeTypeForUTI(NSString *aUTI);
+NSString *preferredUTIForExtension(NSString *ext);
+NSString *preferredUTIForMIMEType(NSString *mime);
+
+NSArray *allExtensions(NSString *aUTI);
+NSArray *allMIMETypes(NSString *aUTI);
+
+NSDictionary *utiDictionary(NSString *aUTI);
+NSArray *conformanceArray(NSString *aUTI);
+
+NSArray *allUTIsForExtension(NSString *ext);
+
+BOOL pathPointsToLikelyUTIMatch(NSString *path, CFStringRef theUTI);
+
+// You can add any number of these as desired.
+BOOL pathPointsToLikelyImage(NSString *path);
+BOOL pathPointsToLikelyAudio(NSString *path);
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/01 - UTI Utilities/UTIHelper.m b/C02 - Documents (Take 2)/01 - UTI Utilities/UTIHelper.m
new file mode 100644
index 0000000..b2e3b24
--- /dev/null
+++ b/C02 - Documents (Take 2)/01 - UTI Utilities/UTIHelper.m
@@ -0,0 +1,153 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 5.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import "UTIHelper.h"
+
+NSString *uuid()
+{
+ CFUUIDRef theUUID = CFUUIDCreate(NULL);
+ NSString *uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, theUUID);
+ CFRelease(theUUID);
+ return uuidString;
+}
+
+NSString *preferredExtensionForUTI(NSString *aUTI)
+{
+ CFStringRef theUTI = (__bridge CFStringRef) aUTI;
+ CFStringRef results = UTTypeCopyPreferredTagWithClass(theUTI, kUTTagClassFilenameExtension);
+ return (__bridge_transfer NSString *)results;
+}
+
+NSString *preferredMimeTypeForUTI(NSString *aUTI)
+{
+ CFStringRef theUTI = (__bridge CFStringRef) aUTI;
+ CFStringRef results = UTTypeCopyPreferredTagWithClass(theUTI, kUTTagClassMIMEType);
+ return (__bridge_transfer NSString *)results;
+}
+
+
+NSString *preferredUTIForExtension(NSString *ext)
+{
+ // Request the UTI via the file extension
+ NSString *theUTI = (__bridge_transfer NSString *) UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef) ext, NULL);
+ return theUTI;
+}
+
+NSString *preferredUTIForMIMEType(NSString *mime)
+{
+ // Request the UTI via the file extension
+ NSString *theUTI = (__bridge_transfer NSString *) UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, (__bridge CFStringRef) mime, NULL);
+ return theUTI;
+}
+
+NSDictionary *utiDictionary(NSString *aUTI)
+{
+ NSDictionary *dictionary = (__bridge_transfer NSDictionary *)UTTypeCopyDeclaration((__bridge CFStringRef) aUTI);
+ return dictionary;
+}
+
+NSArray *uniqueArray(NSArray *anArray)
+{
+ NSMutableArray *copiedArray = [NSMutableArray arrayWithArray:anArray];
+ for (id object in anArray)
+ {
+ [copiedArray removeObjectIdenticalTo:object];
+ [copiedArray addObject:object];
+ }
+
+ return copiedArray;
+}
+
+NSArray *conformanceArray(NSString *aUTI)
+{
+ NSMutableArray *results = [NSMutableArray arrayWithObject:aUTI];
+ NSDictionary *dictionary = utiDictionary(aUTI);
+ id conforms = dictionary[(__bridge NSString *)kUTTypeConformsToKey];
+
+ // No conformance
+ if (!conforms) return results;
+
+ // Single conformance
+ if ([conforms isKindOfClass:[NSString class]])
+ {
+ [results addObjectsFromArray:conformanceArray(conforms)];
+ return uniqueArray(results);
+ }
+
+ // Iterate through multiple conformance
+ if ([conforms isKindOfClass:[NSArray class]])
+ {
+ for (NSString *eachUTI in (NSArray *) conforms)
+ [results addObjectsFromArray:conformanceArray(eachUTI)];
+ return uniqueArray(results);
+ }
+
+ // Just return the one-item array
+ return results;
+}
+
+NSArray *allExtensions(NSString *aUTI)
+{
+ NSMutableArray *results = [NSMutableArray array];
+ NSArray *conformance = conformanceArray(aUTI);
+ for (NSString *eachUTI in conformance)
+ {
+ NSDictionary *dictionary = utiDictionary(eachUTI);
+ NSDictionary *extensions = dictionary[(__bridge NSString *)kUTTypeTagSpecificationKey];
+ id fileTypes = extensions[(__bridge NSString *)kUTTagClassFilenameExtension];
+
+ if ([fileTypes isKindOfClass:[NSArray class]])
+ [results addObjectsFromArray:(NSArray *) fileTypes];
+ else if ([fileTypes isKindOfClass:[NSString class]])
+ [results addObject:(NSString *) fileTypes];
+ }
+
+ return uniqueArray(results);
+}
+
+NSArray *allMIMETypes(NSString *aUTI)
+{
+ NSMutableArray *results = [NSMutableArray array];
+ NSArray *conformance = conformanceArray(aUTI);
+ for (NSString *eachUTI in conformance)
+ {
+ NSDictionary *dictionary = utiDictionary(eachUTI);
+ NSDictionary *extensions = dictionary[(__bridge NSString *)kUTTypeTagSpecificationKey];
+ id fileTypes = extensions[(__bridge NSString *)kUTTagClassMIMEType];
+
+ if ([fileTypes isKindOfClass:[NSArray class]])
+ [results addObjectsFromArray:(NSArray *) fileTypes];
+ else if ([fileTypes isKindOfClass:[NSString class]])
+ [results addObject:(NSString *) fileTypes];
+ }
+
+ return uniqueArray(results);
+}
+
+NSArray *allUTIsForExtension(NSString *ext)
+{
+ NSArray *array = (__bridge_transfer NSArray *) UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef) ext, NULL);
+ return array;
+}
+
+
+BOOL pathPointsToLikelyUTIMatch(NSString *path, CFStringRef theUTI)
+{
+ NSString *extension = path.pathExtension;
+ NSString *preferredUTI = preferredUTIForExtension(extension);
+ return (UTTypeConformsTo((__bridge CFStringRef) preferredUTI, theUTI));
+}
+
+BOOL pathPointsToLikelyImage(NSString *path)
+{
+ return pathPointsToLikelyUTIMatch(path, CFSTR("public.image"));
+}
+
+BOOL pathPointsToLikelyAudio(NSString *path)
+{
+ return pathPointsToLikelyUTIMatch(path, CFSTR("public.audio"));
+}
+
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/.DS_Store b/C02 - Documents (Take 2)/02 - Passive Pasting/.DS_Store
new file mode 100644
index 0000000..48e0c53
Binary files /dev/null and b/C02 - Documents (Take 2)/02 - Passive Pasting/.DS_Store differ
diff --git a/C02 - Documents/05 - QuickLook/AppArt/.DS_Store b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/.DS_Store
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/.DS_Store
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/.DS_Store
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default-Landscape@2x~ipad.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Default-Landscape@2x~ipad.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default-Landscape@2x~ipad.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default-Landscape~ipad.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Default-Landscape~ipad.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default-Landscape~ipad.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default-Portrait@2x~ipad.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Default-Portrait@2x~ipad.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default-Portrait@2x~ipad.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default-Portrait~ipad.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Default-Portrait~ipad.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default-Portrait~ipad.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Default.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Default.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Default@2x.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default@2x.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Default@2x.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Default@2x.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon-144.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-144.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon-144.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-144.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon-72.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-72.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon-72.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-72.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-Small-100.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon-Small-100.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-Small-100.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-Small-50.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon-Small-50.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-Small-50.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-Small.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon-Small.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-Small.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-Small@2x.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon-Small@2x.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon-Small@2x.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon@2x.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon@2x.png
rename to C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon@2x.png
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon~ipad.png
new file mode 100644
index 0000000..7abf98c
Binary files /dev/null and b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon~ipad.png differ
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon~ipad@2x.png
new file mode 100644
index 0000000..4621619
Binary files /dev/null and b/C02 - Documents (Take 2)/02 - Passive Pasting/AppArt/Icon~ipad@2x.png differ
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..e73215e
--- /dev/null
+++ b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/project.pbxproj
@@ -0,0 +1,315 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8E28FC8615CB0CE90010464C /* UTIHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E28FC8515CB0CE90010464C /* UTIHelper.m */; };
+ 8E28FC8C15CB13120010464C /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E28FC8B15CB13120010464C /* MobileCoreServices.framework */; };
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF0D158B9B4800F96828 /* Icon.png */; };
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */; };
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */; };
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */; };
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */; };
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF14158B9B7900F96828 /* Default.png */; };
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF15158B9B7900F96828 /* Default@2x.png */; };
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF16158B9B7900F96828 /* Icon@2x.png */; };
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */; };
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */; };
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E015892BA600A81FD2 /* UIKit.framework */; };
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E215892BA600A81FD2 /* Foundation.framework */; };
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */; };
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8EF624E915892BA600A81FD2 /* InfoPlist.strings */; };
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF624EC15892BA600A81FD2 /* main.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 8E28FC8415CB0CE90010464C /* UTIHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTIHelper.h; sourceTree = ""; };
+ 8E28FC8515CB0CE90010464C /* UTIHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UTIHelper.m; sourceTree = ""; };
+ 8E28FC8B15CB13120010464C /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = AppArt/Icon.png; sourceTree = ""; };
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "AppArt/Default-Landscape@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "AppArt/Default-Landscape~ipad.png"; sourceTree = ""; };
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "AppArt/Default-Portrait@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait~ipad.png"; path = "AppArt/Default-Portrait~ipad.png"; sourceTree = ""; };
+ 8EB9BF14158B9B7900F96828 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = AppArt/Default.png; sourceTree = ""; };
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "AppArt/Default@2x.png"; sourceTree = ""; };
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "AppArt/Icon@2x.png"; sourceTree = ""; };
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad.png"; path = "AppArt/Icon~ipad.png"; sourceTree = ""; };
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad@2x.png"; path = "AppArt/Icon~ipad@2x.png"; sourceTree = ""; };
+ 8EE9B88F15B746C400F4FCCA /* Utility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Utility.h; sourceTree = ""; };
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HelloWorld-Info.plist"; sourceTree = ""; };
+ 8EF624EA15892BA600A81FD2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 8EF624EC15892BA600A81FD2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; };
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HelloWorld-Prefix.pch"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8EF624D915892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8E28FC8C15CB13120010464C /* MobileCoreServices.framework in Frameworks */,
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */,
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */,
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 8EF624D115892BA600A81FD2 = {
+ isa = PBXGroup;
+ children = (
+ 8EF624EC15892BA600A81FD2 /* main.m */,
+ 8E28FC8415CB0CE90010464C /* UTIHelper.h */,
+ 8E28FC8515CB0CE90010464C /* UTIHelper.m */,
+ 8EF624E715892BA600A81FD2 /* Supporting Files */,
+ 8EF624DF15892BA600A81FD2 /* Frameworks */,
+ 8EF624DD15892BA600A81FD2 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 8EF624DD15892BA600A81FD2 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8EF624DF15892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8E28FC8B15CB13120010464C /* MobileCoreServices.framework */,
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */,
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */,
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 8EF624E715892BA600A81FD2 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 8EE9B88F15B746C400F4FCCA /* Utility.h */,
+ 8EF6250B15892CDA00A81FD2 /* System Art */,
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */,
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */,
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ path = HelloWorld;
+ sourceTree = "";
+ };
+ 8EF6250B15892CDA00A81FD2 /* System Art */ = {
+ isa = PBXGroup;
+ children = (
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */,
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */,
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */,
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */,
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */,
+ 8EB9BF14158B9B7900F96828 /* Default.png */,
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */,
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */,
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */,
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */,
+ );
+ name = "System Art";
+ path = ..;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */;
+ buildPhases = (
+ 8EF624D815892BA600A81FD2 /* Sources */,
+ 8EF624D915892BA600A81FD2 /* Frameworks */,
+ 8EF624DA15892BA600A81FD2 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HelloWorld;
+ productName = HelloWorld;
+ productReference = 8EF624DC15892BA600A81FD2 /* HelloWorld.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 8EF624D315892BA600A81FD2 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ ORGANIZATIONNAME = "Erica Sadun";
+ };
+ buildConfigurationList = 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 8EF624D115892BA600A81FD2;
+ productRefGroup = 8EF624DD15892BA600A81FD2 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8EF624DA15892BA600A81FD2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */,
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */,
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */,
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */,
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */,
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */,
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */,
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */,
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */,
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */,
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8EF624D815892BA600A81FD2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */,
+ 8E28FC8615CB0CE90010464C /* UTIHelper.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 8EF624EA15892BA600A81FD2 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 8EF624F215892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ 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_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 8EF624F315892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 8EF624F515892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 8EF624F615892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F215892BA600A81FD2 /* Debug */,
+ 8EF624F315892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F515892BA600A81FD2 /* Debug */,
+ 8EF624F615892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 8EF624D315892BA600A81FD2 /* Project object */;
+}
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..11951cd
Binary files /dev/null and b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
rename to C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
rename to C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/HelloWorld-Info.plist
new file mode 100644
index 0000000..0e596de
--- /dev/null
+++ b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/HelloWorld-Info.plist
@@ -0,0 +1,64 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${PRODUCT_NAME}
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIcons
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ Icon.png
+ Icon@2x.png
+ Default.png
+ Default@2x.png
+ Icon~ipad.png
+ Icon~ipad@2x.png
+ Default-Portrait~ipad.png
+ Default-Portrait@2x~ipad.png
+ Default-Landscape~ipad.png
+ Default-Landscape@2x~ipad.png
+
+
+
+ CFBundleIdentifier
+ com.sadun.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/HelloWorld-Prefix.pch
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/HelloWorld-Prefix.pch
rename to C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/HelloWorld-Prefix.pch
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/Utility.h b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/Utility.h
new file mode 100644
index 0000000..d3ac659
--- /dev/null
+++ b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/Utility.h
@@ -0,0 +1,83 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#pragma mark - Cookbook
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+
+#pragma mark - Bar Buttons
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+#define SYSBARBUTTON(ITEM, SELECTOR) [[UIBarButtonItem alloc] initWithBarButtonSystemItem:ITEM target:self action:SELECTOR]
+#define IMGBARBUTTON(IMAGE, SELECTOR) [[UIBarButtonItem alloc] initWithImage:IMAGE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+#define CUSTOMBARBUTTON(VIEW) [[UIBarButtonItem alloc] initWithCustomView:VIEW]
+
+#define SYSBARBUTTON_TARGET(ITEM, TARGET, SELECTOR) [[UIBarButtonItem alloc] initWithBarButtonSystemItem:ITEM target:TARGET action:SELECTOR]
+#define BARBUTTON_TARGET(TITLE, TARGET, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:TARGET action:SELECTOR]
+
+#pragma mark - Platform
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
+
+#pragma mark - Orientation
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait(self.interfaceOrientation)
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation) || UIDeviceOrientationIsPortrait(self.interfaceOrientation)
+
+#pragma mark - Debug
+#define BOOL_CHECK(TITLE, CHECK_ITEM) printf("%s: %s\n", TITLE, (CHECK_ITEM) ? "Yes" : "No")
+
+#pragma mark - Geometry
+#define RECTCENTER(RECT) CGPointMake(CGRectGetMidX(RECT), CGRectGetMidY(RECT))
+#define RESIZABLE(VIEW) [VIEW setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth]
+
+#pragma mark - Strings
+#define STREQ(STRING1, STRING2) ([STRING1 caseInsensitiveCompare:STRING2] == NSOrderedSame)
+#define PREFIXED(STRING1, STRING2) ([[STRING1 uppercaseString] hasPrefix:[STRING2 uppercaseString]])
+#define TRIMSTRING(STRING) ([STRING stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]])
+#define STRDATA(STRING) ([STRING dataUsingEncoding:NSUTF8StringEncoding])
+#define DATASTR(DATA) ([[NSString alloc] initWithData:DATA encoding:NSUTF8StringEncoding])
+
+#pragma mark - Constraints
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+#define CONSTRAIN_VIEWS(PARENT, FORMAT, BINDINGS) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:BINDINGS]]
+
+// Stretch across axes
+#define STRETCH_VIEW_H(PARENT, VIEW) CONSTRAIN(PARENT, VIEW, @"H:|["#VIEW"(>=0)]|")
+#define STRETCH_VIEW_V(PARENT, VIEW) CONSTRAIN(PARENT, VIEW, @"V:|["#VIEW"(>=0)]|")
+#define STRETCH_VIEW(PARENT, VIEW) {STRETCH_VIEW_H(PARENT, VIEW); STRETCH_VIEW_V(PARENT, VIEW);}
+
+// Center along axes
+#define CENTER_VIEW_H(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]]
+#define CENTER_VIEW_V(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]]
+#define CENTER_VIEW(PARENT, VIEW) {CENTER_VIEW_H(PARENT, VIEW); CENTER_VIEW_V(PARENT, VIEW);}
+
+// Align to parent
+#define ALIGN_VIEW_LEFT(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_RIGHT(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeRight multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_TOP(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_BOTTOM(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]
+
+// Set Size
+#define CONSTRAIN_WIDTH(VIEW, WIDTH) CONSTRAIN(VIEW, VIEW, @"H:["#VIEW"(=="#WIDTH")]")
+#define CONSTRAIN_HEIGHT(VIEW, HEIGHT) CONSTRAIN(VIEW, VIEW, @"V:["#VIEW"(=="#HEIGHT")]")
+#define CONSTRAIN_SIZE(VIEW, HEIGHT, WIDTH) {CONSTRAIN_WIDTH(VIEW, WIDTH); CONSTRAIN_HEIGHT(VIEW, HEIGHT);}
+
+// Set Aspect
+#define CONSTRAIN_ASPECT(VIEW, ASPECT) [VIEW addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:VIEW attribute:NSLayoutAttributeHeight multiplier:(ASPECT) constant:0.0f]]
+
+// Order items
+#define CONSTRAIN_ORDER_H(PARENT, VIEW1, VIEW2) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(@"H:["#VIEW1"]->=0-["#VIEW2"]") options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW1, VIEW2)]]
+#define CONSTRAIN_ORDER_V(PARENT, VIEW1, VIEW2) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(@"V:["#VIEW1"]->=0-["#VIEW2"]") options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW1, VIEW2)]]
+
+#pragma mark - Util
+
+// Bail with complaint
+#define COMPLAIN_AND_BAIL(_COMPLAINT_, _ARG_) {NSLog(_COMPLAINT_, _ARG_); return;}
+#define COMPLAIN_AND_BAIL_NIL(_COMPLAINT_, _ARG_) {NSLog(_COMPLAINT_, _ARG_); return nil;}
+
+// Math
+#define SIGN(_NUM_) ((_NUM_ < 0) ? (-1) : 1)
+
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/en.lproj/InfoPlist.strings
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/en.lproj/InfoPlist.strings
rename to C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/en.lproj/InfoPlist.strings
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/main.m b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/main.m
new file mode 100644
index 0000000..ebd329d
--- /dev/null
+++ b/C02 - Documents (Take 2)/02 - Passive Pasting/HelloWorld/main.m
@@ -0,0 +1,81 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import "UTIHelper.h"
+#import "Utility.h"
+
+@interface TestBedViewController : UIViewController
+@end
+
+@implementation TestBedViewController
+{
+ UITextView *textView;
+ BOOL enableWatcher;
+}
+
+- (void) updatePasteboard
+{
+ if (enableWatcher)
+ [UIPasteboard generalPasteboard].string = textView.text;
+}
+
+- (void)textViewDidChange:(UITextView *)textView
+{
+ [self updatePasteboard];
+}
+
+- (void) toggle: (UIBarButtonItem *) bbi
+{
+ enableWatcher = !enableWatcher;
+ bbi.title = enableWatcher ? @"Stop Watching" : @"Watch";
+}
+
+- (void) loadView
+{
+ [super loadView];
+ self.view.backgroundColor = [UIColor whiteColor];
+
+ textView = [[UITextView alloc] initWithFrame:CGRectZero];
+ textView.delegate = self;
+ [self updatePasteboard];
+ [self.view addSubview:textView];
+
+ PREPCONSTRAINTS(textView);
+ STRETCH_VIEW(self.view, textView);
+
+ self.navigationItem.rightBarButtonItem = BARBUTTON(@"Watch", @selector(toggle:));
+
+ NSLog(@"%@", conformanceArray(allUTIsForExtension(@"JPEG")[0]));
+}
+@end
+
+#pragma mark - Application Setup -
+@interface TestBedAppDelegate : NSObject
+@end
+@implementation TestBedAppDelegate
+{
+ UIWindow *window;
+}
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ // [application setStatusBarHidden:YES];
+ [[UINavigationBar appearance] setTintColor:COOKBOOK_PURPLE_COLOR];
+
+ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ TestBedViewController *tbvc = [[TestBedViewController alloc] init];
+ UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:tbvc];
+ window.rootViewController = nav;
+ [window makeKeyAndVisible];
+ return YES;
+}
+@end
+int main(int argc, char *argv[]) {
+ @autoreleasepool {
+ int retVal = UIApplicationMain(argc, argv, nil, @"TestBedAppDelegate");
+ return retVal;
+ }
+}
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/UTIHelper.h b/C02 - Documents (Take 2)/02 - Passive Pasting/UTIHelper.h
new file mode 100644
index 0000000..4f127c4
--- /dev/null
+++ b/C02 - Documents (Take 2)/02 - Passive Pasting/UTIHelper.h
@@ -0,0 +1,29 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 5.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import
+
+NSString *uuid();
+
+NSString *preferredExtensionForUTI(NSString *aUTI);
+NSString *preferredMimeTypeForUTI(NSString *aUTI);
+NSString *preferredUTIForExtension(NSString *ext);
+NSString *preferredUTIForMIMEType(NSString *mime);
+
+NSArray *allExtensions(NSString *aUTI);
+NSArray *allMIMETypes(NSString *aUTI);
+
+NSDictionary *utiDictionary(NSString *aUTI);
+NSArray *conformanceArray(NSString *aUTI);
+
+NSArray *allUTIsForExtension(NSString *ext);
+
+BOOL pathPointsToLikelyUTIMatch(NSString *path, CFStringRef theUTI);
+
+// You can add any number of these as desired.
+BOOL pathPointsToLikelyImage(NSString *path);
+BOOL pathPointsToLikelyAudio(NSString *path);
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/02 - Passive Pasting/UTIHelper.m b/C02 - Documents (Take 2)/02 - Passive Pasting/UTIHelper.m
new file mode 100644
index 0000000..b2e3b24
--- /dev/null
+++ b/C02 - Documents (Take 2)/02 - Passive Pasting/UTIHelper.m
@@ -0,0 +1,153 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 5.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import "UTIHelper.h"
+
+NSString *uuid()
+{
+ CFUUIDRef theUUID = CFUUIDCreate(NULL);
+ NSString *uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, theUUID);
+ CFRelease(theUUID);
+ return uuidString;
+}
+
+NSString *preferredExtensionForUTI(NSString *aUTI)
+{
+ CFStringRef theUTI = (__bridge CFStringRef) aUTI;
+ CFStringRef results = UTTypeCopyPreferredTagWithClass(theUTI, kUTTagClassFilenameExtension);
+ return (__bridge_transfer NSString *)results;
+}
+
+NSString *preferredMimeTypeForUTI(NSString *aUTI)
+{
+ CFStringRef theUTI = (__bridge CFStringRef) aUTI;
+ CFStringRef results = UTTypeCopyPreferredTagWithClass(theUTI, kUTTagClassMIMEType);
+ return (__bridge_transfer NSString *)results;
+}
+
+
+NSString *preferredUTIForExtension(NSString *ext)
+{
+ // Request the UTI via the file extension
+ NSString *theUTI = (__bridge_transfer NSString *) UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef) ext, NULL);
+ return theUTI;
+}
+
+NSString *preferredUTIForMIMEType(NSString *mime)
+{
+ // Request the UTI via the file extension
+ NSString *theUTI = (__bridge_transfer NSString *) UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, (__bridge CFStringRef) mime, NULL);
+ return theUTI;
+}
+
+NSDictionary *utiDictionary(NSString *aUTI)
+{
+ NSDictionary *dictionary = (__bridge_transfer NSDictionary *)UTTypeCopyDeclaration((__bridge CFStringRef) aUTI);
+ return dictionary;
+}
+
+NSArray *uniqueArray(NSArray *anArray)
+{
+ NSMutableArray *copiedArray = [NSMutableArray arrayWithArray:anArray];
+ for (id object in anArray)
+ {
+ [copiedArray removeObjectIdenticalTo:object];
+ [copiedArray addObject:object];
+ }
+
+ return copiedArray;
+}
+
+NSArray *conformanceArray(NSString *aUTI)
+{
+ NSMutableArray *results = [NSMutableArray arrayWithObject:aUTI];
+ NSDictionary *dictionary = utiDictionary(aUTI);
+ id conforms = dictionary[(__bridge NSString *)kUTTypeConformsToKey];
+
+ // No conformance
+ if (!conforms) return results;
+
+ // Single conformance
+ if ([conforms isKindOfClass:[NSString class]])
+ {
+ [results addObjectsFromArray:conformanceArray(conforms)];
+ return uniqueArray(results);
+ }
+
+ // Iterate through multiple conformance
+ if ([conforms isKindOfClass:[NSArray class]])
+ {
+ for (NSString *eachUTI in (NSArray *) conforms)
+ [results addObjectsFromArray:conformanceArray(eachUTI)];
+ return uniqueArray(results);
+ }
+
+ // Just return the one-item array
+ return results;
+}
+
+NSArray *allExtensions(NSString *aUTI)
+{
+ NSMutableArray *results = [NSMutableArray array];
+ NSArray *conformance = conformanceArray(aUTI);
+ for (NSString *eachUTI in conformance)
+ {
+ NSDictionary *dictionary = utiDictionary(eachUTI);
+ NSDictionary *extensions = dictionary[(__bridge NSString *)kUTTypeTagSpecificationKey];
+ id fileTypes = extensions[(__bridge NSString *)kUTTagClassFilenameExtension];
+
+ if ([fileTypes isKindOfClass:[NSArray class]])
+ [results addObjectsFromArray:(NSArray *) fileTypes];
+ else if ([fileTypes isKindOfClass:[NSString class]])
+ [results addObject:(NSString *) fileTypes];
+ }
+
+ return uniqueArray(results);
+}
+
+NSArray *allMIMETypes(NSString *aUTI)
+{
+ NSMutableArray *results = [NSMutableArray array];
+ NSArray *conformance = conformanceArray(aUTI);
+ for (NSString *eachUTI in conformance)
+ {
+ NSDictionary *dictionary = utiDictionary(eachUTI);
+ NSDictionary *extensions = dictionary[(__bridge NSString *)kUTTypeTagSpecificationKey];
+ id fileTypes = extensions[(__bridge NSString *)kUTTagClassMIMEType];
+
+ if ([fileTypes isKindOfClass:[NSArray class]])
+ [results addObjectsFromArray:(NSArray *) fileTypes];
+ else if ([fileTypes isKindOfClass:[NSString class]])
+ [results addObject:(NSString *) fileTypes];
+ }
+
+ return uniqueArray(results);
+}
+
+NSArray *allUTIsForExtension(NSString *ext)
+{
+ NSArray *array = (__bridge_transfer NSArray *) UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef) ext, NULL);
+ return array;
+}
+
+
+BOOL pathPointsToLikelyUTIMatch(NSString *path, CFStringRef theUTI)
+{
+ NSString *extension = path.pathExtension;
+ NSString *preferredUTI = preferredUTIForExtension(extension);
+ return (UTTypeConformsTo((__bridge CFStringRef) preferredUTI, theUTI));
+}
+
+BOOL pathPointsToLikelyImage(NSString *path)
+{
+ return pathPointsToLikelyUTIMatch(path, CFSTR("public.image"));
+}
+
+BOOL pathPointsToLikelyAudio(NSString *path)
+{
+ return pathPointsToLikelyUTIMatch(path, CFSTR("public.audio"));
+}
+
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/.DS_Store b/C02 - Documents (Take 2)/03 - Monitoring/.DS_Store
new file mode 100644
index 0000000..a78045e
Binary files /dev/null and b/C02 - Documents (Take 2)/03 - Monitoring/.DS_Store differ
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/.DS_Store b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/.DS_Store
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/.DS_Store
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/.DS_Store
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default-Landscape@2x~ipad.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Default-Landscape@2x~ipad.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default-Landscape@2x~ipad.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default-Landscape~ipad.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Default-Landscape~ipad.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default-Landscape~ipad.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default-Portrait@2x~ipad.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Default-Portrait@2x~ipad.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default-Portrait@2x~ipad.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default-Portrait~ipad.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Default-Portrait~ipad.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default-Portrait~ipad.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Default.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Default.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Default@2x.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default@2x.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Default@2x.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Default@2x.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon-144.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-144.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon-144.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-144.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon-72.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-72.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon-72.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-72.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-Small-100.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon-Small-100.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-Small-100.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-Small-50.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon-Small-50.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-Small-50.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-Small.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon-Small.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-Small.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-Small@2x.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon-Small@2x.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon-Small@2x.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon@2x.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon@2x.png
rename to C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon@2x.png
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon~ipad.png
new file mode 100644
index 0000000..7abf98c
Binary files /dev/null and b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon~ipad.png differ
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon~ipad@2x.png
new file mode 100644
index 0000000..4621619
Binary files /dev/null and b/C02 - Documents (Take 2)/03 - Monitoring/AppArt/Icon~ipad@2x.png differ
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/DocWatchHelper.h b/C02 - Documents (Take 2)/03 - Monitoring/DocWatchHelper.h
new file mode 100644
index 0000000..d84c32d
--- /dev/null
+++ b/C02 - Documents (Take 2)/03 - Monitoring/DocWatchHelper.h
@@ -0,0 +1,10 @@
+#define kDocumentChanged @"DocumentsFolderContentsDidChangeNotification"
+
+@interface DocWatchHelper : NSObject
+{
+ CFFileDescriptorRef kqref;
+ CFRunLoopSourceRef rls;
+}
+@property (strong) NSString *path;
++ (id) watcherForPath: (NSString *) aPath;
+@end
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/DocWatchHelper.m b/C02 - Documents (Take 2)/03 - Monitoring/DocWatchHelper.m
new file mode 100644
index 0000000..4a405a8
--- /dev/null
+++ b/C02 - Documents (Take 2)/03 - Monitoring/DocWatchHelper.m
@@ -0,0 +1,80 @@
+#import "DocWatchHelper.h"
+#import
+#import
+
+@implementation DocWatchHelper
+@synthesize path;
+
+- (void)kqueueFired
+{
+ int kq;
+ struct kevent event;
+ struct timespec timeout = { 0, 0 };
+ int eventCount;
+
+ kq = CFFileDescriptorGetNativeDescriptor(self->kqref);
+ assert(kq >= 0);
+
+ eventCount = kevent(kq, NULL, 0, &event, 1, &timeout);
+ assert( (eventCount >= 0) && (eventCount < 2) );
+
+ if (eventCount == 1)
+ [[NSNotificationCenter defaultCenter] postNotificationName:kDocumentChanged object:self];
+
+ CFFileDescriptorEnableCallBacks(self->kqref, kCFFileDescriptorReadCallBack);
+}
+
+static void KQCallback(CFFileDescriptorRef kqRef, CFOptionFlags callBackTypes, void *info)
+{
+ DocWatchHelper *helper = (DocWatchHelper *)(__bridge id)(CFTypeRef) info;
+ [helper kqueueFired];
+}
+
+- (void) beginGeneratingDocumentNotificationsInPath: (NSString *) docPath
+{
+ int dirFD;
+ int kq;
+ int retVal;
+ struct kevent eventToAdd;
+ CFFileDescriptorContext context = { 0, (void *)(__bridge CFTypeRef) self, NULL, NULL, NULL };
+
+ dirFD = open([docPath fileSystemRepresentation], O_EVTONLY);
+ assert(dirFD >= 0);
+
+ kq = kqueue();
+ assert(kq >= 0);
+
+ eventToAdd.ident = dirFD;
+ eventToAdd.filter = EVFILT_VNODE;
+ eventToAdd.flags = EV_ADD | EV_CLEAR;
+ eventToAdd.fflags = NOTE_WRITE;
+ eventToAdd.data = 0;
+ eventToAdd.udata = NULL;
+
+ retVal = kevent(kq, &eventToAdd, 1, NULL, 0, NULL);
+ assert(retVal == 0);
+
+ self->kqref = CFFileDescriptorCreate(NULL, kq, true, KQCallback, &context);
+ rls = CFFileDescriptorCreateRunLoopSource(NULL, self->kqref, 0);
+ assert(rls != NULL);
+
+ CFRunLoopAddSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
+ CFRelease(rls);
+ CFFileDescriptorEnableCallBacks(self->kqref, kCFFileDescriptorReadCallBack);
+}
+
+- (void) dealloc
+{
+ self.path = nil;
+ CFRunLoopRemoveSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
+ CFFileDescriptorDisableCallBacks(self->kqref, kCFFileDescriptorReadCallBack);
+}
+
++ (id) watcherForPath: (NSString *) aPath
+{
+ DocWatchHelper *watcher = [[self alloc] init];
+ watcher.path = aPath;
+ [watcher beginGeneratingDocumentNotificationsInPath:aPath];
+ return watcher;
+}
+@end
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..551a15d
--- /dev/null
+++ b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/project.pbxproj
@@ -0,0 +1,323 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8E28FC9615CB21280010464C /* DocWatchHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E28FC9315CB21280010464C /* DocWatchHelper.m */; };
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF0D158B9B4800F96828 /* Icon.png */; };
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */; };
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */; };
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */; };
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */; };
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF14158B9B7900F96828 /* Default.png */; };
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF15158B9B7900F96828 /* Default@2x.png */; };
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF16158B9B7900F96828 /* Icon@2x.png */; };
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */; };
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */; };
+ 8EC38FE015B38D0A0034B7D1 /* Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC38FDF15B38D0A0034B7D1 /* Utility.m */; };
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E015892BA600A81FD2 /* UIKit.framework */; };
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E215892BA600A81FD2 /* Foundation.framework */; };
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */; };
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8EF624E915892BA600A81FD2 /* InfoPlist.strings */; };
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF624EC15892BA600A81FD2 /* main.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 8E28FC9215CB21280010464C /* DocWatchHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocWatchHelper.h; sourceTree = ""; };
+ 8E28FC9315CB21280010464C /* DocWatchHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DocWatchHelper.m; sourceTree = ""; };
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = AppArt/Icon.png; sourceTree = ""; };
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "AppArt/Default-Landscape@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "AppArt/Default-Landscape~ipad.png"; sourceTree = ""; };
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "AppArt/Default-Portrait@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait~ipad.png"; path = "AppArt/Default-Portrait~ipad.png"; sourceTree = ""; };
+ 8EB9BF14158B9B7900F96828 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = AppArt/Default.png; sourceTree = ""; };
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "AppArt/Default@2x.png"; sourceTree = ""; };
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "AppArt/Icon@2x.png"; sourceTree = ""; };
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad.png"; path = "AppArt/Icon~ipad.png"; sourceTree = ""; };
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad@2x.png"; path = "AppArt/Icon~ipad@2x.png"; sourceTree = ""; };
+ 8EC38FDE15B38D0A0034B7D1 /* Utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utility.h; sourceTree = ""; };
+ 8EC38FDF15B38D0A0034B7D1 /* Utility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utility.m; sourceTree = ""; };
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HelloWorld-Info.plist"; sourceTree = ""; };
+ 8EF624EA15892BA600A81FD2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 8EF624EC15892BA600A81FD2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; };
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HelloWorld-Prefix.pch"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8EF624D915892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */,
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */,
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 8EC38FDD15B38D0A0034B7D1 /* Utility */ = {
+ isa = PBXGroup;
+ children = (
+ 8EC38FDE15B38D0A0034B7D1 /* Utility.h */,
+ 8EC38FDF15B38D0A0034B7D1 /* Utility.m */,
+ );
+ path = Utility;
+ sourceTree = "";
+ };
+ 8EF624D115892BA600A81FD2 = {
+ isa = PBXGroup;
+ children = (
+ 8EF624EC15892BA600A81FD2 /* main.m */,
+ 8E28FC9215CB21280010464C /* DocWatchHelper.h */,
+ 8E28FC9315CB21280010464C /* DocWatchHelper.m */,
+ 8EF624E715892BA600A81FD2 /* Supporting Files */,
+ 8EF624DF15892BA600A81FD2 /* Frameworks */,
+ 8EF624DD15892BA600A81FD2 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 8EF624DD15892BA600A81FD2 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8EF624DF15892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */,
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */,
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 8EF624E715892BA600A81FD2 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 8EC38FDD15B38D0A0034B7D1 /* Utility */,
+ 8EF6250B15892CDA00A81FD2 /* System Art */,
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */,
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */,
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ path = HelloWorld;
+ sourceTree = "";
+ };
+ 8EF6250B15892CDA00A81FD2 /* System Art */ = {
+ isa = PBXGroup;
+ children = (
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */,
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */,
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */,
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */,
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */,
+ 8EB9BF14158B9B7900F96828 /* Default.png */,
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */,
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */,
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */,
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */,
+ );
+ name = "System Art";
+ path = ..;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */;
+ buildPhases = (
+ 8EF624D815892BA600A81FD2 /* Sources */,
+ 8EF624D915892BA600A81FD2 /* Frameworks */,
+ 8EF624DA15892BA600A81FD2 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HelloWorld;
+ productName = HelloWorld;
+ productReference = 8EF624DC15892BA600A81FD2 /* HelloWorld.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 8EF624D315892BA600A81FD2 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ ORGANIZATIONNAME = "Erica Sadun";
+ };
+ buildConfigurationList = 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 8EF624D115892BA600A81FD2;
+ productRefGroup = 8EF624DD15892BA600A81FD2 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8EF624DA15892BA600A81FD2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */,
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */,
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */,
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */,
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */,
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */,
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */,
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */,
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */,
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */,
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8EF624D815892BA600A81FD2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */,
+ 8EC38FE015B38D0A0034B7D1 /* Utility.m in Sources */,
+ 8E28FC9615CB21280010464C /* DocWatchHelper.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 8EF624EA15892BA600A81FD2 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 8EF624F215892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ 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_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 8EF624F315892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 8EF624F515892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 8EF624F615892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F215892BA600A81FD2 /* Debug */,
+ 8EF624F315892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F515892BA600A81FD2 /* Debug */,
+ 8EF624F615892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 8EF624D315892BA600A81FD2 /* Project object */;
+}
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..20e0b48
Binary files /dev/null and b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
rename to C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
rename to C02 - Documents (Take 2)/03 - Monitoring/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/HelloWorld-Info.plist
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld/HelloWorld-Info.plist
rename to C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/HelloWorld-Info.plist
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/HelloWorld-Prefix.pch
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/HelloWorld-Prefix.pch
rename to C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/HelloWorld-Prefix.pch
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/Utility/Utility.h b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/Utility/Utility.h
new file mode 100644
index 0000000..4c29d16
--- /dev/null
+++ b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/Utility/Utility.h
@@ -0,0 +1,22 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+
+#define LEFTH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]];
+#define TOPV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]];
+
+#define CENTERH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]];
+#define CENTERV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]];
+
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
+
+UIImage *stringImage(NSString *string, UIFont *aFont, CGFloat inset);
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/Utility/Utility.m b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/Utility/Utility.m
new file mode 100644
index 0000000..622690f
--- /dev/null
+++ b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/Utility/Utility.m
@@ -0,0 +1,37 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+UIImage *stringImage(NSString *string, UIFont *aFont, CGFloat inset)
+{
+ CGSize baseSize = [string sizeWithFont:aFont];
+ CGSize adjustedSize = CGSizeMake(baseSize.width + inset * 2, baseSize.height + inset * 2);
+
+ UIGraphicsBeginImageContext(adjustedSize);
+ CGContextRef context = UIGraphicsGetCurrentContext();
+
+ // Draw white backdrop
+ CGRect bounds = (CGRect){.size = adjustedSize};
+ [[UIColor whiteColor] set];
+ CGContextAddRect(context, bounds);
+ CGContextFillPath(context);
+
+ // Draw a black edge
+ [[UIColor blackColor] set];
+ CGContextAddRect(context, bounds);
+ CGContextSetLineWidth(context, inset);
+ CGContextStrokePath(context);
+
+ // Draw the string in black
+ CGRect insetBounds = CGRectInset(bounds, inset, inset);
+ [string drawInRect:insetBounds withFont:aFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];
+
+ UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+
+ return newImage;
+}
+
+
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/en.lproj/InfoPlist.strings
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/en.lproj/InfoPlist.strings
rename to C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/en.lproj/InfoPlist.strings
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/main.m b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/main.m
new file mode 100644
index 0000000..5297671
--- /dev/null
+++ b/C02 - Documents (Take 2)/03 - Monitoring/HelloWorld/main.m
@@ -0,0 +1,94 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import "Utility.h"
+#import "DocWatchHelper.h"
+
+@interface TestBedViewController : UITableViewController
+@end
+
+@implementation TestBedViewController
+{
+ NSArray *items;
+ DocWatchHelper *helper;
+}
+
+// Number of sections
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView
+{
+ return 1;
+}
+
+// Rows per section
+- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
+{
+ return items.count;
+}
+
+// Return a cell for the index path
+- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
+ cell.textLabel.text = [items objectAtIndex:indexPath.row];
+ return cell;
+}
+
+- (void) scanDocuments
+{
+ NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
+ items = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
+ [self.tableView reloadData];
+}
+
+// Set up table
+- (void) loadView
+{
+ [super loadView];
+
+ [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
+ [self scanDocuments];
+
+ [[NSNotificationCenter defaultCenter] addObserverForName:kDocumentChanged object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification)
+ {
+ // Contents changed
+ [self scanDocuments];
+ }];
+
+ NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
+ helper = [DocWatchHelper watcherForPath:path];
+}
+@end
+
+#pragma mark -
+
+#pragma mark Application Setup
+@interface TestBedAppDelegate : NSObject
+@end
+@implementation TestBedAppDelegate
+{
+ UIWindow *window;
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ // [application setStatusBarHidden:YES];
+ [[UINavigationBar appearance] setTintColor:COOKBOOK_PURPLE_COLOR];
+
+ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ TestBedViewController *tbvc = [[TestBedViewController alloc] init];
+ UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:tbvc];
+ window.rootViewController = nav;
+ [window makeKeyAndVisible];
+ return YES;
+}
+@end
+int main(int argc, char *argv[]) {
+ @autoreleasepool {
+ int retVal = UIApplicationMain(argc, argv, nil, @"TestBedAppDelegate");
+ return retVal;
+ }
+}
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/Utility/Utility.h b/C02 - Documents (Take 2)/03 - Monitoring/Utility/Utility.h
new file mode 100644
index 0000000..4c29d16
--- /dev/null
+++ b/C02 - Documents (Take 2)/03 - Monitoring/Utility/Utility.h
@@ -0,0 +1,22 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+
+#define LEFTH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]];
+#define TOPV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]];
+
+#define CENTERH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]];
+#define CENTERV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]];
+
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
+
+UIImage *stringImage(NSString *string, UIFont *aFont, CGFloat inset);
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/03 - Monitoring/Utility/Utility.m b/C02 - Documents (Take 2)/03 - Monitoring/Utility/Utility.m
new file mode 100644
index 0000000..622690f
--- /dev/null
+++ b/C02 - Documents (Take 2)/03 - Monitoring/Utility/Utility.m
@@ -0,0 +1,37 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+UIImage *stringImage(NSString *string, UIFont *aFont, CGFloat inset)
+{
+ CGSize baseSize = [string sizeWithFont:aFont];
+ CGSize adjustedSize = CGSizeMake(baseSize.width + inset * 2, baseSize.height + inset * 2);
+
+ UIGraphicsBeginImageContext(adjustedSize);
+ CGContextRef context = UIGraphicsGetCurrentContext();
+
+ // Draw white backdrop
+ CGRect bounds = (CGRect){.size = adjustedSize};
+ [[UIColor whiteColor] set];
+ CGContextAddRect(context, bounds);
+ CGContextFillPath(context);
+
+ // Draw a black edge
+ [[UIColor blackColor] set];
+ CGContextAddRect(context, bounds);
+ CGContextSetLineWidth(context, inset);
+ CGContextStrokePath(context);
+
+ // Draw the string in black
+ CGRect insetBounds = CGRectInset(bounds, inset, inset);
+ [string drawInRect:insetBounds withFont:aFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];
+
+ UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+
+ return newImage;
+}
+
+
diff --git a/C02 - Documents/04 - Activity Controller/.DS_Store b/C02 - Documents (Take 2)/04 - Activity Controller/.DS_Store
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/.DS_Store
rename to C02 - Documents (Take 2)/04 - Activity Controller/.DS_Store
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/.DS_Store b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/.DS_Store
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/.DS_Store
rename to C02 - Documents (Take 2)/04 - Activity Controller/AppArt/.DS_Store
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Landscape@2x~ipad.png
new file mode 100644
index 0000000..cd947e7
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Landscape@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Landscape~ipad.png
new file mode 100644
index 0000000..45b897a
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Landscape~ipad.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Portrait@2x~ipad.png
new file mode 100644
index 0000000..2ec5306
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Portrait@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Portrait~ipad.png
new file mode 100644
index 0000000..3a349cc
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default-Portrait~ipad.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default.png
new file mode 100644
index 0000000..2f91416
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default@2x.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default@2x.png
new file mode 100644
index 0000000..5de3b4a
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Default@2x.png differ
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-144.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon~ipad@2x.png
rename to C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-144.png
diff --git a/C02 - Documents/04 - Activity Controller/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-72.png
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/AppArt/Icon~ipad.png
rename to C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-72.png
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small-100.png
new file mode 100644
index 0000000..4fed549
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small-100.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small-50.png
new file mode 100644
index 0000000..e207c5e
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small-50.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small.png
new file mode 100644
index 0000000..ff6af41
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small@2x.png
new file mode 100644
index 0000000..8a62eeb
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon-Small@2x.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon.png
new file mode 100644
index 0000000..8aba049
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon.png differ
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon@2x.png
new file mode 100644
index 0000000..fea5531
Binary files /dev/null and b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon@2x.png differ
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon~ipad.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon~ipad.png
rename to C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon~ipad.png
diff --git a/C02 - Documents/05 - QuickLook/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon~ipad@2x.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/AppArt/Icon~ipad@2x.png
rename to C02 - Documents (Take 2)/04 - Activity Controller/AppArt/Icon~ipad@2x.png
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/project.pbxproj
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/project.pbxproj
rename to C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/project.pbxproj
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..174a04e
--- /dev/null
+++ b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
rename to C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
new file mode 100644
index 0000000..f2a8256
--- /dev/null
+++ b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..252c017
--- /dev/null
+++ b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ SchemeUserState
+
+ HelloWorld.xcscheme
+
+ orderHint
+ 0
+
+
+ SuppressBuildableAutocreation
+
+ 8EF624DB15892BA600A81FD2
+
+ primary
+
+
+
+
+
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/HelloWorld-Info.plist
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/HelloWorld-Info.plist
rename to C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/HelloWorld-Info.plist
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/HelloWorld-Prefix.pch
new file mode 100644
index 0000000..a7977de
--- /dev/null
+++ b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/HelloWorld-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'HelloWorld' target in the 'HelloWorld' project
+//
+
+#import
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iOS SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import
+ #import
+#endif
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld/Utility.h b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/Utility.h
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld/Utility.h
rename to C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/Utility.h
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld/Utility.m b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/Utility.m
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld/Utility.m
rename to C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/Utility.m
diff --git a/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/C02 - Documents/04 - Activity Controller/HelloWorld/main.m b/C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/main.m
similarity index 100%
rename from C02 - Documents/04 - Activity Controller/HelloWorld/main.m
rename to C02 - Documents (Take 2)/04 - Activity Controller/HelloWorld/main.m
diff --git a/C02 - Documents/05 - QuickLook/.DS_Store b/C02 - Documents (Take 2)/05 - QuickLook/.DS_Store
similarity index 100%
rename from C02 - Documents/05 - QuickLook/.DS_Store
rename to C02 - Documents (Take 2)/05 - QuickLook/.DS_Store
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/.DS_Store b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/.DS_Store
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/.DS_Store
rename to C02 - Documents (Take 2)/05 - QuickLook/AppArt/.DS_Store
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Landscape@2x~ipad.png
new file mode 100644
index 0000000..cd947e7
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Landscape@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Landscape~ipad.png
new file mode 100644
index 0000000..45b897a
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Landscape~ipad.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Portrait@2x~ipad.png
new file mode 100644
index 0000000..2ec5306
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Portrait@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Portrait~ipad.png
new file mode 100644
index 0000000..3a349cc
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default-Portrait~ipad.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default.png
new file mode 100644
index 0000000..2f91416
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default@2x.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default@2x.png
new file mode 100644
index 0000000..5de3b4a
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Default@2x.png differ
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-144.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon~ipad@2x.png
rename to C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-144.png
diff --git a/C02 - Documents/06 - QuickLook Activity/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-72.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/AppArt/Icon~ipad.png
rename to C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-72.png
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small-100.png
new file mode 100644
index 0000000..4fed549
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small-100.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small-50.png
new file mode 100644
index 0000000..e207c5e
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small-50.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small.png
new file mode 100644
index 0000000..ff6af41
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small@2x.png
new file mode 100644
index 0000000..8a62eeb
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon-Small@2x.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon.png
new file mode 100644
index 0000000..8aba049
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon@2x.png
new file mode 100644
index 0000000..fea5531
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon@2x.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon~ipad.png
new file mode 100644
index 0000000..7267560
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon~ipad.png differ
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon~ipad@2x.png
new file mode 100644
index 0000000..897c834
Binary files /dev/null and b/C02 - Documents (Take 2)/05 - QuickLook/AppArt/Icon~ipad@2x.png differ
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/project.pbxproj
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/project.pbxproj
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/project.pbxproj
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..174a04e
--- /dev/null
+++ b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
new file mode 100644
index 0000000..f2a8256
--- /dev/null
+++ b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..252c017
--- /dev/null
+++ b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ SchemeUserState
+
+ HelloWorld.xcscheme
+
+ orderHint
+ 0
+
+
+ SuppressBuildableAutocreation
+
+ 8EF624DB15892BA600A81FD2
+
+ primary
+
+
+
+
+
diff --git a/C02 - Documents/06 - QuickLook Activity/QLArt/.DS_Store b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/.DS_Store
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/QLArt/.DS_Store
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/.DS_Store
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Hand.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Hand.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Hand.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Hand.png
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Hand.psd b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Hand.psd
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Hand.psd
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Hand.psd
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Hand@2x.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Hand@2x.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Hand@2x.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Hand@2x.png
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon-72.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon-72.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon-72.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon-72.png
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon-Small-50.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon-Small-50.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon-Small-50.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon-Small-50.png
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon-Small.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon-Small.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon-Small.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon-Small.png
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon-Small@2x.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon-Small@2x.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon-Small@2x.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon-Small@2x.png
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon.png
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon@2x.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon@2x.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/Icon@2x.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/Icon@2x.png
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Art/iTunesArtwork.png b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/iTunesArtwork.png
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Art/iTunesArtwork.png
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Art/iTunesArtwork.png
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/HelloWorld-Info.plist
new file mode 100644
index 0000000..520a413
--- /dev/null
+++ b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/HelloWorld-Info.plist
@@ -0,0 +1,66 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${PRODUCT_NAME}
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIcons
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ Icon.png
+ Icon@2x.png
+ Default.png
+ Default@2x.png
+ Icon~ipad.png
+ Icon~ipad@2x.png
+ Default-Portrait~ipad.png
+ Default-Portrait@2x~ipad.png
+ Default-Landscape~ipad.png
+ Default-Landscape@2x~ipad.png
+
+
+
+ CFBundleIdentifier
+ com.sadun.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIFileSharingEnabled
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/HelloWorld-Prefix.pch
new file mode 100644
index 0000000..a7977de
--- /dev/null
+++ b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/HelloWorld-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'HelloWorld' target in the 'HelloWorld' project
+//
+
+#import
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iOS SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import
+ #import
+#endif
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/Utility.h b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Utility.h
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/Utility.h
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/Utility.h
diff --git a/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/C02 - Documents/05 - QuickLook/HelloWorld/main.m b/C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/main.m
similarity index 100%
rename from C02 - Documents/05 - QuickLook/HelloWorld/main.m
rename to C02 - Documents (Take 2)/05 - QuickLook/HelloWorld/main.m
diff --git a/C02 - Documents/06 - QuickLook Activity/.DS_Store b/C02 - Documents (Take 2)/06 - QuickLook Activity/.DS_Store
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/.DS_Store
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/.DS_Store
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/.DS_Store b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Landscape@2x~ipad.png
new file mode 100644
index 0000000..cd947e7
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Landscape@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Landscape~ipad.png
new file mode 100644
index 0000000..45b897a
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Landscape~ipad.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Portrait@2x~ipad.png
new file mode 100644
index 0000000..2ec5306
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Portrait@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Portrait~ipad.png
new file mode 100644
index 0000000..3a349cc
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default-Portrait~ipad.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default.png
new file mode 100644
index 0000000..2f91416
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default@2x.png
new file mode 100644
index 0000000..5de3b4a
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Default@2x.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-144.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-144.png
new file mode 100644
index 0000000..897c834
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-144.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-72.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-72.png
new file mode 100644
index 0000000..7267560
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-72.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small-100.png
new file mode 100644
index 0000000..4fed549
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small-100.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small-50.png
new file mode 100644
index 0000000..e207c5e
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small-50.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small.png
new file mode 100644
index 0000000..ff6af41
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small@2x.png
new file mode 100644
index 0000000..8a62eeb
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon-Small@2x.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon.png
new file mode 100644
index 0000000..8aba049
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon@2x.png
new file mode 100644
index 0000000..fea5531
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon@2x.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon~ipad.png
new file mode 100644
index 0000000..7267560
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon~ipad.png differ
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon~ipad@2x.png
new file mode 100644
index 0000000..897c834
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/AppArt/Icon~ipad@2x.png differ
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/project.pbxproj
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/project.pbxproj
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/project.pbxproj
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..174a04e
--- /dev/null
+++ b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
new file mode 100644
index 0000000..f2a8256
--- /dev/null
+++ b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..252c017
--- /dev/null
+++ b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ SchemeUserState
+
+ HelloWorld.xcscheme
+
+ orderHint
+ 0
+
+
+ SuppressBuildableAutocreation
+
+ 8EF624DB15892BA600A81FD2
+
+ primary
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/.DS_Store b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/.DS_Store differ
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Hand.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Hand.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Hand.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Hand.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Hand.psd b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Hand.psd
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Hand.psd
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Hand.psd
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Hand@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Hand@2x.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Hand@2x.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Hand@2x.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon-72.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon-72.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon-72.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon-72.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon-Small-50.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon-Small-50.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon-Small-50.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon-Small-50.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon-Small.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon-Small.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon-Small.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon-Small.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon-Small@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon-Small@2x.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon-Small@2x.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon-Small@2x.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon@2x.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/Icon@2x.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/Icon@2x.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/iTunesArtwork.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/iTunesArtwork.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Art/iTunesArtwork.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Art/iTunesArtwork.png
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/HelloWorld-Info.plist
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/HelloWorld-Info.plist
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/HelloWorld-Info.plist
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/HelloWorld-Prefix.pch
new file mode 100644
index 0000000..a7977de
--- /dev/null
+++ b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/HelloWorld-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'HelloWorld' target in the 'HelloWorld' project
+//
+
+#import
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iOS SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import
+ #import
+#endif
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/Utility.h b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Utility.h
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/Utility.h
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/Utility.h
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/C02 - Documents/06 - QuickLook Activity/HelloWorld/main.m b/C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/main.m
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/HelloWorld/main.m
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/HelloWorld/main.m
diff --git a/C02 - Documents/06 - QuickLook Activity/QLActivity.h b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLActivity.h
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/QLActivity.h
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/QLActivity.h
diff --git a/C02 - Documents/06 - QuickLook Activity/QLActivity.m b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLActivity.m
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/QLActivity.m
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/QLActivity.m
diff --git a/C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/.DS_Store b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/.DS_Store differ
diff --git a/C02 - Documents/06 - QuickLook Activity/QLArt/QL.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QL.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/QLArt/QL.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QL.png
diff --git a/C02 - Documents/06 - QuickLook Activity/QLArt/QL@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QL@2x.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/QLArt/QL@2x.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QL@2x.png
diff --git a/C02 - Documents/06 - QuickLook Activity/QLArt/QLBase.psd b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QLBase.psd
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/QLArt/QLBase.psd
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QLBase.psd
diff --git a/C02 - Documents/06 - QuickLook Activity/QLArt/QL~iPad.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QL~iPad.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/QLArt/QL~iPad.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QL~iPad.png
diff --git a/C02 - Documents/06 - QuickLook Activity/QLArt/QL~iPad@2x.png b/C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QL~iPad@2x.png
similarity index 100%
rename from C02 - Documents/06 - QuickLook Activity/QLArt/QL~iPad@2x.png
rename to C02 - Documents (Take 2)/06 - QuickLook Activity/QLArt/QL~iPad@2x.png
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/.DS_Store b/C02 - Documents (Take 2)/07 - Basic DIC/.DS_Store
new file mode 100644
index 0000000..277dd16
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/.DS_Store b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Landscape@2x~ipad.png
new file mode 100644
index 0000000..cd947e7
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Landscape@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Landscape~ipad.png
new file mode 100644
index 0000000..45b897a
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Landscape~ipad.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Portrait@2x~ipad.png
new file mode 100644
index 0000000..2ec5306
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Portrait@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Portrait~ipad.png
new file mode 100644
index 0000000..3a349cc
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default-Portrait~ipad.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default.png
new file mode 100644
index 0000000..2f91416
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default@2x.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default@2x.png
new file mode 100644
index 0000000..5de3b4a
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Default@2x.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-144.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-144.png
new file mode 100644
index 0000000..897c834
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-144.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-72.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-72.png
new file mode 100644
index 0000000..7267560
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-72.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small-100.png
new file mode 100644
index 0000000..4fed549
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small-100.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small-50.png
new file mode 100644
index 0000000..e207c5e
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small-50.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small.png
new file mode 100644
index 0000000..ff6af41
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small@2x.png
new file mode 100644
index 0000000..8a62eeb
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon-Small@2x.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon.png
new file mode 100644
index 0000000..8aba049
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon@2x.png
new file mode 100644
index 0000000..fea5531
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon@2x.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon~ipad.png
new file mode 100644
index 0000000..7abf98c
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon~ipad.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon~ipad@2x.png
new file mode 100644
index 0000000..4621619
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/AppArt/Icon~ipad@2x.png differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..d1e19e9
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.pbxproj
@@ -0,0 +1,309 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF0D158B9B4800F96828 /* Icon.png */; };
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */; };
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */; };
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */; };
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */; };
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF14158B9B7900F96828 /* Default.png */; };
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF15158B9B7900F96828 /* Default@2x.png */; };
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF16158B9B7900F96828 /* Icon@2x.png */; };
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */; };
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */; };
+ 8EE7D0F515D843680026D7B9 /* Notes in Resources */ = {isa = PBXBuildFile; fileRef = 8EE7D0F415D843680026D7B9 /* Notes */; };
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E015892BA600A81FD2 /* UIKit.framework */; };
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E215892BA600A81FD2 /* Foundation.framework */; };
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */; };
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8EF624E915892BA600A81FD2 /* InfoPlist.strings */; };
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF624EC15892BA600A81FD2 /* main.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = AppArt/Icon.png; sourceTree = ""; };
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "AppArt/Default-Landscape@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "AppArt/Default-Landscape~ipad.png"; sourceTree = ""; };
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "AppArt/Default-Portrait@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait~ipad.png"; path = "AppArt/Default-Portrait~ipad.png"; sourceTree = ""; };
+ 8EB9BF14158B9B7900F96828 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = AppArt/Default.png; sourceTree = ""; };
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "AppArt/Default@2x.png"; sourceTree = ""; };
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "AppArt/Icon@2x.png"; sourceTree = ""; };
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad.png"; path = "AppArt/Icon~ipad.png"; sourceTree = ""; };
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad@2x.png"; path = "AppArt/Icon~ipad@2x.png"; sourceTree = ""; };
+ 8EE7D0F415D843680026D7B9 /* Notes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Notes; sourceTree = ""; };
+ 8EE9B88F15B746C400F4FCCA /* Utility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Utility.h; sourceTree = ""; };
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HelloWorld-Info.plist"; sourceTree = ""; };
+ 8EF624EA15892BA600A81FD2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 8EF624EC15892BA600A81FD2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; };
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HelloWorld-Prefix.pch"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8EF624D915892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */,
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */,
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 8EF624D115892BA600A81FD2 = {
+ isa = PBXGroup;
+ children = (
+ 8EF624EC15892BA600A81FD2 /* main.m */,
+ 8EF624E715892BA600A81FD2 /* Supporting Files */,
+ 8EF624DF15892BA600A81FD2 /* Frameworks */,
+ 8EF624DD15892BA600A81FD2 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 8EF624DD15892BA600A81FD2 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8EF624DF15892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */,
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */,
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 8EF624E715892BA600A81FD2 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 8EE9B88F15B746C400F4FCCA /* Utility.h */,
+ 8EE7D0F415D843680026D7B9 /* Notes */,
+ 8EF6250B15892CDA00A81FD2 /* System Art */,
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */,
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */,
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ path = HelloWorld;
+ sourceTree = "";
+ };
+ 8EF6250B15892CDA00A81FD2 /* System Art */ = {
+ isa = PBXGroup;
+ children = (
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */,
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */,
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */,
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */,
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */,
+ 8EB9BF14158B9B7900F96828 /* Default.png */,
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */,
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */,
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */,
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */,
+ );
+ name = "System Art";
+ path = ..;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */;
+ buildPhases = (
+ 8EF624D815892BA600A81FD2 /* Sources */,
+ 8EF624D915892BA600A81FD2 /* Frameworks */,
+ 8EF624DA15892BA600A81FD2 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HelloWorld;
+ productName = HelloWorld;
+ productReference = 8EF624DC15892BA600A81FD2 /* HelloWorld.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 8EF624D315892BA600A81FD2 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ ORGANIZATIONNAME = "Erica Sadun";
+ };
+ buildConfigurationList = 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 8EF624D115892BA600A81FD2;
+ productRefGroup = 8EF624DD15892BA600A81FD2 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8EF624DA15892BA600A81FD2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */,
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */,
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */,
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */,
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */,
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */,
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */,
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */,
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */,
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */,
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */,
+ 8EE7D0F515D843680026D7B9 /* Notes in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8EF624D815892BA600A81FD2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 8EF624EA15892BA600A81FD2 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 8EF624F215892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ 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_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 8EF624F315892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 8EF624F515892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 8EF624F615892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F215892BA600A81FD2 /* Debug */,
+ 8EF624F315892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F515892BA600A81FD2 /* Debug */,
+ 8EF624F615892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 8EF624D315892BA600A81FD2 /* Project object */;
+}
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..174a04e
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..c9b8c4b
Binary files /dev/null and b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
new file mode 100644
index 0000000..f2a8256
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..252c017
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ SchemeUserState
+
+ HelloWorld.xcscheme
+
+ orderHint
+ 0
+
+
+ SuppressBuildableAutocreation
+
+ 8EF624DB15892BA600A81FD2
+
+ primary
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/HelloWorld-Info.plist
new file mode 100644
index 0000000..1d428d1
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/HelloWorld-Info.plist
@@ -0,0 +1,67 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${PRODUCT_NAME}
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIcons
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ Icon.png
+ Icon@2x.png
+ Default.png
+ Default@2x.png
+ Icon~ipad.png
+ Icon~ipad@2x.png
+ Default-Portrait~ipad.png
+ Default-Portrait@2x~ipad.png
+ Default-Landscape~ipad.png
+ Default-Landscape@2x~ipad.png
+
+
+
+ CFBundleIdentifier
+ com.sadun.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIFileSharingEnabled
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+ UIInterfaceOrientationPortraitUpsideDown
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/HelloWorld-Prefix.pch
new file mode 100644
index 0000000..a7977de
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/HelloWorld-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'HelloWorld' target in the 'HelloWorld' project
+//
+
+#import
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iOS SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import
+ #import
+#endif
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/Notes b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/Notes
new file mode 100644
index 0000000..e69de29
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/Utility.h b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/Utility.h
new file mode 100644
index 0000000..0ee0e9f
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/Utility.h
@@ -0,0 +1,106 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#pragma mark - Cookbook
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+
+#pragma mark - Bar Buttons
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+#define SYSBARBUTTON(ITEM, SELECTOR) [[UIBarButtonItem alloc] initWithBarButtonSystemItem:ITEM target:self action:SELECTOR]
+#define IMGBARBUTTON(IMAGE, SELECTOR) [[UIBarButtonItem alloc] initWithImage:IMAGE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+#define CUSTOMBARBUTTON(VIEW) [[UIBarButtonItem alloc] initWithCustomView:VIEW]
+
+#define SYSBARBUTTON_TARGET(ITEM, TARGET, SELECTOR) [[UIBarButtonItem alloc] initWithBarButtonSystemItem:ITEM target:TARGET action:SELECTOR]
+#define BARBUTTON_TARGET(TITLE, TARGET, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:TARGET action:SELECTOR]
+
+#pragma mark - Platform
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
+
+#pragma mark - Orientation
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait(self.interfaceOrientation)
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation) || UIDeviceOrientationIsPortrait(self.interfaceOrientation)
+
+#pragma mark - Debug
+#define BOOL_CHECK(TITLE, CHECK_ITEM) printf("%s: %s\n", TITLE, (CHECK_ITEM) ? "Yes" : "No")
+
+#pragma mark - Geometry
+#define RECTCENTER(RECT) CGPointMake(CGRectGetMidX(RECT), CGRectGetMidY(RECT))
+#define RECT_PT(_X_, _Y_) CGRectMake(_X_, _Y_, 0.0f, 0.0f)
+#define RECT_SIZE(_W_, _H_) CGRectMake(0.0f, 0.0f, _W_, _H_)
+
+#pragma mark - Autosizing
+#define RESIZABLE(VIEW) [VIEW setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth]
+
+#pragma mark - Strings
+#define STREQ(STRING1, STRING2) ([STRING1 caseInsensitiveCompare:STRING2] == NSOrderedSame)
+#define PREFIXED(STRING1, STRING2) ([[STRING1 uppercaseString] hasPrefix:[STRING2 uppercaseString]])
+#define TRIMSTRING(STRING) ([STRING stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]])
+#define PADSTRING(STRING) ([NSString stringWithFormat:@" %@ ", TRIMSTRING(STRING)])
+
+#define STRDATA(STRING) ([STRING dataUsingEncoding:NSUTF8StringEncoding])
+#define DATASTR(DATA) ([[NSString alloc] initWithData:DATA encoding:NSUTF8StringEncoding])
+
+#define RECTSTRING(_aRect_) NSStringFromCGRect(_aRect_)
+#define POINTSTRING(_aPoint_) NSStringFromCGPoint(_aPoint_)
+#define SIZESTRING(_aSize_) NSStringFromCGSize(_aSize_)
+
+#pragma mark - Constraints
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+#define CONSTRAIN_VIEWS(PARENT, FORMAT, BINDINGS) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:BINDINGS]]
+
+// Stretch across axes
+#define STRETCH_VIEW_H(PARENT, VIEW) CONSTRAIN(PARENT, VIEW, @"H:|["#VIEW"(>=0)]|")
+#define STRETCH_VIEW_V(PARENT, VIEW) CONSTRAIN(PARENT, VIEW, @"V:|["#VIEW"(>=0)]|")
+#define STRETCH_VIEW(PARENT, VIEW) {STRETCH_VIEW_H(PARENT, VIEW); STRETCH_VIEW_V(PARENT, VIEW);}
+
+// Center along axes
+#define CENTER_VIEW_H(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]]
+#define CENTER_VIEW_V(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]]
+#define CENTER_VIEW(PARENT, VIEW) {CENTER_VIEW_H(PARENT, VIEW); CENTER_VIEW_V(PARENT, VIEW);}
+
+// Align to parent
+#define ALIGN_VIEW_LEFT(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_RIGHT(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeRight multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_TOP(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_BOTTOM(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]
+
+// Set Size
+#define CONSTRAIN_WIDTH(VIEW, WIDTH) CONSTRAIN(VIEW, VIEW, @"H:["#VIEW"(=="#WIDTH")]")
+#define CONSTRAIN_HEIGHT(VIEW, HEIGHT) CONSTRAIN(VIEW, VIEW, @"V:["#VIEW"(=="#HEIGHT")]")
+#define CONSTRAIN_SIZE(VIEW, HEIGHT, WIDTH) {CONSTRAIN_WIDTH(VIEW, WIDTH); CONSTRAIN_HEIGHT(VIEW, HEIGHT);}
+
+// Set Aspect
+#define CONSTRAIN_ASPECT(VIEW, ASPECT) [VIEW addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:VIEW attribute:NSLayoutAttributeHeight multiplier:(ASPECT) constant:0.0f]]
+
+// Order items
+#define CONSTRAIN_ORDER_H(PARENT, VIEW1, VIEW2) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(@"H:["#VIEW1"]->=0-["#VIEW2"]") options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW1, VIEW2)]]
+#define CONSTRAIN_ORDER_V(PARENT, VIEW1, VIEW2) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(@"V:["#VIEW1"]->=0-["#VIEW2"]") options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW1, VIEW2)]]
+
+#pragma mark - Defaults
+
+// Defaults
+#define DEFAULT_INT(_KEY_) [[NSUserDefaults standardUserDefaults] integerForKey:_KEY_]
+#define DEFAULT_OBJ(_KEY_) [[NSUserDefaults standardUserDefaults] objectForKey:_KEY_]
+
+#pragma mark - Util
+
+// Bail with complaint
+#define COMPLAIN_AND_BAIL(_COMPLAINT_, _ARG_) {NSLog(_COMPLAINT_, _ARG_); return;}
+#define COMPLAIN_AND_BAIL_NIL(_COMPLAINT_, _ARG_) {NSLog(_COMPLAINT_, _ARG_); return nil;}
+
+#pragma mark - Delegates and Controls
+
+// Delegate
+#define SAFE_PERFORM_WITH_ARG(THE_OBJECT, THE_SELECTOR, THE_ARG) (([THE_OBJECT respondsToSelector:THE_SELECTOR]) ? [THE_OBJECT performSelector:THE_SELECTOR withObject:THE_ARG] : nil)
+
+// Controls
+#define CALLBACK_VAL(_CONTROL_, _SELECTOR_) [_CONTROL_ addTarget:self action:_SELECTOR_ forControlEvents:UIControlEventValueChanged]
+#define CALLBACK_PRESS(_CONTROL_, _SELECTOR_) [_CONTROL_ addTarget:self action:_SELECTOR_ forControlEvents:UIControlEventTouchUpInside]
+#define SAFE_CALLBACK_VAL(_CONTROL_, _SELECTOR_) {if ([self respondsToSelector:_SELECTOR_]) CALLBACK_VAL(_CONTROL_, _SELECTOR_);}
+#define SAFE_CALLBACK_PRESS(_CONTROL_, _SELECTOR_) {if ([self respondsToSelector:_SELECTOR_]) CALLBACK_PRESS(_CONTROL_, _SELECTOR_);}
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/main.m b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/main.m
new file mode 100644
index 0000000..feba263
--- /dev/null
+++ b/C02 - Documents (Take 2)/07 - Basic DIC/HelloWorld/main.m
@@ -0,0 +1,142 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import "Utility.h"
+
+@interface TestBedViewController : UIViewController
+@end
+
+@implementation TestBedViewController
+{
+ NSURL *fileURL;
+ UIDocumentInteractionController *dic;
+ BOOL canOpen;
+}
+
+#pragma mark QuickLook
+- (UIViewController *) documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
+{
+ return self;
+}
+
+- (UIView *) documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller
+{
+ return self.view;
+}
+
+- (CGRect) documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller
+{
+ return self.view.frame;
+}
+
+#pragma mark Options / Open in Menu
+
+- (void) documentInteractionControllerDidDismissOptionsMenu: (UIDocumentInteractionController *) controller
+{
+ self.navigationItem.leftBarButtonItem.enabled = YES;
+ dic = nil;
+}
+
+- (void) documentInteractionControllerDidDismissOpenInMenu: (UIDocumentInteractionController *) controller
+{
+ self.navigationItem.rightBarButtonItem.enabled = canOpen;
+ dic = nil;
+}
+
+- (void) dismissIfNeeded
+{
+ // Proactively dismiss any visible popover
+ if (dic)
+ {
+ [dic dismissMenuAnimated:YES];
+ self.navigationItem.rightBarButtonItem.enabled = canOpen;
+ self.navigationItem.leftBarButtonItem.enabled = YES;
+ }
+}
+
+- (void) action: (UIBarButtonItem *) bbi
+{
+ [self dismissIfNeeded];
+ dic = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
+ dic.delegate = self;
+ self.navigationItem.leftBarButtonItem.enabled = NO;
+ [dic presentOptionsMenuFromBarButtonItem:bbi animated:YES];
+}
+
+- (void) open: (UIBarButtonItem *) bbi
+{
+ [self dismissIfNeeded];
+ dic = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
+ dic.delegate = self;
+ self.navigationItem.rightBarButtonItem.enabled = NO;
+ [dic presentOpenInMenuFromBarButtonItem:bbi animated:YES];
+}
+
+#pragma mark Test for Open-ability
+-(BOOL)canOpen: (NSURL *) aFileURL
+{
+ UIDocumentInteractionController *tmp = [UIDocumentInteractionController interactionControllerWithURL:aFileURL];
+ BOOL success = [tmp presentOpenInMenuFromRect:CGRectMake(0,0,1,1) inView:self.view animated:NO];
+ [tmp dismissMenuAnimated:NO];
+ return success;
+}
+
+- (void) viewDidAppear:(BOOL)animated
+{
+ // Only enable right button if the file can be opened
+ canOpen = [self canOpen:fileURL];
+ self.navigationItem.rightBarButtonItem.enabled = canOpen;
+
+ // This does not work -- It will likely return YES even if no apps can open this file type
+ // NSLog(@"%d", [[UIApplication sharedApplication] canOpenURL:fileURL]);
+}
+
+- (void) loadView
+{
+ [super loadView];
+ self.view.backgroundColor = [UIColor whiteColor];
+ self.navigationItem.rightBarButtonItem = BARBUTTON(@"Open in...", @selector(open:));
+ self.navigationItem.leftBarButtonItem = SYSBARBUTTON(UIBarButtonSystemItemAction, @selector(action:));
+
+ // Create a new image if one is not found
+ NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/DICImage.jpg"];
+ if (![[NSFileManager defaultManager] fileExistsAtPath:filePath])
+ {
+ UIImage *image = [UIImage imageNamed:@"Default.png"];
+ NSData *data = UIImageJPEGRepresentation(image, 1.0f);
+ [data writeToFile:filePath atomically:YES];
+ }
+ fileURL = [NSURL fileURLWithPath:filePath];
+}
+@end
+
+#pragma mark - Application Setup -
+@interface TestBedAppDelegate : NSObject
+@end
+@implementation TestBedAppDelegate
+{
+ UIWindow *window;
+}
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ // [application setStatusBarHidden:YES];
+ [[UINavigationBar appearance] setTintColor:COOKBOOK_PURPLE_COLOR];
+
+ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ TestBedViewController *tbvc = [[TestBedViewController alloc] init];
+ UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:tbvc];
+ window.rootViewController = nav;
+ [window makeKeyAndVisible];
+ return YES;
+}
+@end
+int main(int argc, char *argv[]) {
+ @autoreleasepool {
+ int retVal = UIApplicationMain(argc, argv, nil, @"TestBedAppDelegate");
+ return retVal;
+ }
+}
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/.DS_Store b/C02 - Documents (Take 2)/08 - Doc Requester/.DS_Store
new file mode 100644
index 0000000..e06f780
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/.DS_Store b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Cover-320.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Cover-320.png
new file mode 100644
index 0000000..ffa0f98
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Cover-320.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Cover-64.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Cover-64.png
new file mode 100644
index 0000000..000792c
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Cover-64.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Landscape@2x~ipad.png
new file mode 100644
index 0000000..cd947e7
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Landscape@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Landscape~ipad.png
new file mode 100644
index 0000000..45b897a
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Landscape~ipad.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Portrait@2x~ipad.png
new file mode 100644
index 0000000..2ec5306
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Portrait@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Portrait~ipad.png
new file mode 100644
index 0000000..3a349cc
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default-Portrait~ipad.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default.png
new file mode 100644
index 0000000..2f91416
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default@2x.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default@2x.png
new file mode 100644
index 0000000..5de3b4a
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Default@2x.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-144.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-144.png
new file mode 100644
index 0000000..897c834
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-144.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-72.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-72.png
new file mode 100644
index 0000000..7267560
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-72.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small-100.png
new file mode 100644
index 0000000..4fed549
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small-100.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small-50.png
new file mode 100644
index 0000000..e207c5e
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small-50.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small.png
new file mode 100644
index 0000000..ff6af41
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small@2x.png
new file mode 100644
index 0000000..8a62eeb
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon-Small@2x.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon.png
new file mode 100644
index 0000000..8aba049
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon@2x.png
new file mode 100644
index 0000000..fea5531
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon@2x.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon~ipad.png
new file mode 100644
index 0000000..7abf98c
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon~ipad.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon~ipad@2x.png
new file mode 100644
index 0000000..4621619
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/AppArt/Icon~ipad@2x.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..1b330c0
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.pbxproj
@@ -0,0 +1,347 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF0D158B9B4800F96828 /* Icon.png */; };
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */; };
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */; };
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */; };
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */; };
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF14158B9B7900F96828 /* Default.png */; };
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF15158B9B7900F96828 /* Default@2x.png */; };
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF16158B9B7900F96828 /* Icon@2x.png */; };
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */; };
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */; };
+ 8EBDBD3D15F2FE160044BA09 /* QLItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EBDBD3C15F2FE160044BA09 /* QLItem.m */; };
+ 8EBDBD4115F2FE590044BA09 /* TestBedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EBDBD4015F2FE590044BA09 /* TestBedViewController.m */; };
+ 8EC38FE015B38D0A0034B7D1 /* Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC38FDF15B38D0A0034B7D1 /* Utility.m */; };
+ 8EC3D3F715ED3CBB009375A7 /* Cover-64.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EC3D3F515ED3CBB009375A7 /* Cover-64.png */; };
+ 8EC3D3F815ED3CBB009375A7 /* Cover-320.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EC3D3F615ED3CBB009375A7 /* Cover-320.png */; };
+ 8EC3D44715ED4B1A009375A7 /* QuickLook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC3D44615ED4B1A009375A7 /* QuickLook.framework */; };
+ 8EC3D44A15ED5227009375A7 /* InboxHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC3D44915ED5227009375A7 /* InboxHelper.m */; };
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E015892BA600A81FD2 /* UIKit.framework */; };
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E215892BA600A81FD2 /* Foundation.framework */; };
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */; };
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8EF624E915892BA600A81FD2 /* InfoPlist.strings */; };
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF624EC15892BA600A81FD2 /* main.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = AppArt/Icon.png; sourceTree = ""; };
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "AppArt/Default-Landscape@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "AppArt/Default-Landscape~ipad.png"; sourceTree = ""; };
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "AppArt/Default-Portrait@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait~ipad.png"; path = "AppArt/Default-Portrait~ipad.png"; sourceTree = ""; };
+ 8EB9BF14158B9B7900F96828 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = AppArt/Default.png; sourceTree = ""; };
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "AppArt/Default@2x.png"; sourceTree = ""; };
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "AppArt/Icon@2x.png"; sourceTree = ""; };
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad.png"; path = "AppArt/Icon~ipad.png"; sourceTree = ""; };
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad@2x.png"; path = "AppArt/Icon~ipad@2x.png"; sourceTree = ""; };
+ 8EBDBD3B15F2FE160044BA09 /* QLItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QLItem.h; sourceTree = ""; };
+ 8EBDBD3C15F2FE160044BA09 /* QLItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QLItem.m; sourceTree = ""; };
+ 8EBDBD3F15F2FE590044BA09 /* TestBedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestBedViewController.h; sourceTree = ""; };
+ 8EBDBD4015F2FE590044BA09 /* TestBedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestBedViewController.m; sourceTree = ""; };
+ 8EC38FDE15B38D0A0034B7D1 /* Utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utility.h; sourceTree = ""; };
+ 8EC38FDF15B38D0A0034B7D1 /* Utility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utility.m; sourceTree = ""; };
+ 8EC3D3F515ED3CBB009375A7 /* Cover-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Cover-64.png"; sourceTree = ""; };
+ 8EC3D3F615ED3CBB009375A7 /* Cover-320.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Cover-320.png"; sourceTree = ""; };
+ 8EC3D44615ED4B1A009375A7 /* QuickLook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickLook.framework; path = System/Library/Frameworks/QuickLook.framework; sourceTree = SDKROOT; };
+ 8EC3D44815ED5227009375A7 /* InboxHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InboxHelper.h; sourceTree = ""; };
+ 8EC3D44915ED5227009375A7 /* InboxHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InboxHelper.m; sourceTree = ""; };
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HelloWorld-Info.plist"; sourceTree = ""; };
+ 8EF624EA15892BA600A81FD2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 8EF624EC15892BA600A81FD2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; };
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HelloWorld-Prefix.pch"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8EF624D915892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EC3D44715ED4B1A009375A7 /* QuickLook.framework in Frameworks */,
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */,
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */,
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 8EC38FDD15B38D0A0034B7D1 /* Utility */ = {
+ isa = PBXGroup;
+ children = (
+ 8EC38FDE15B38D0A0034B7D1 /* Utility.h */,
+ 8EC38FDF15B38D0A0034B7D1 /* Utility.m */,
+ );
+ path = Utility;
+ sourceTree = "";
+ };
+ 8EF624D115892BA600A81FD2 = {
+ isa = PBXGroup;
+ children = (
+ 8EF624EC15892BA600A81FD2 /* main.m */,
+ 8EBDBD3F15F2FE590044BA09 /* TestBedViewController.h */,
+ 8EBDBD4015F2FE590044BA09 /* TestBedViewController.m */,
+ 8EBDBD3B15F2FE160044BA09 /* QLItem.h */,
+ 8EBDBD3C15F2FE160044BA09 /* QLItem.m */,
+ 8EC3D44815ED5227009375A7 /* InboxHelper.h */,
+ 8EC3D44915ED5227009375A7 /* InboxHelper.m */,
+ 8EF624E715892BA600A81FD2 /* Supporting Files */,
+ 8EF624DF15892BA600A81FD2 /* Frameworks */,
+ 8EF624DD15892BA600A81FD2 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 8EF624DD15892BA600A81FD2 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8EF624DF15892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8EC3D44615ED4B1A009375A7 /* QuickLook.framework */,
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */,
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */,
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 8EF624E715892BA600A81FD2 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 8EC3D3F515ED3CBB009375A7 /* Cover-64.png */,
+ 8EC3D3F615ED3CBB009375A7 /* Cover-320.png */,
+ 8EC38FDD15B38D0A0034B7D1 /* Utility */,
+ 8EF6250B15892CDA00A81FD2 /* System Art */,
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */,
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */,
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ path = HelloWorld;
+ sourceTree = "";
+ };
+ 8EF6250B15892CDA00A81FD2 /* System Art */ = {
+ isa = PBXGroup;
+ children = (
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */,
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */,
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */,
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */,
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */,
+ 8EB9BF14158B9B7900F96828 /* Default.png */,
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */,
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */,
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */,
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */,
+ );
+ name = "System Art";
+ path = ..;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */;
+ buildPhases = (
+ 8EF624D815892BA600A81FD2 /* Sources */,
+ 8EF624D915892BA600A81FD2 /* Frameworks */,
+ 8EF624DA15892BA600A81FD2 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HelloWorld;
+ productName = HelloWorld;
+ productReference = 8EF624DC15892BA600A81FD2 /* HelloWorld.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 8EF624D315892BA600A81FD2 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ ORGANIZATIONNAME = "Erica Sadun";
+ };
+ buildConfigurationList = 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 8EF624D115892BA600A81FD2;
+ productRefGroup = 8EF624DD15892BA600A81FD2 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8EF624DA15892BA600A81FD2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */,
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */,
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */,
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */,
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */,
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */,
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */,
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */,
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */,
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */,
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */,
+ 8EC3D3F715ED3CBB009375A7 /* Cover-64.png in Resources */,
+ 8EC3D3F815ED3CBB009375A7 /* Cover-320.png in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8EF624D815892BA600A81FD2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */,
+ 8EC38FE015B38D0A0034B7D1 /* Utility.m in Sources */,
+ 8EC3D44A15ED5227009375A7 /* InboxHelper.m in Sources */,
+ 8EBDBD3D15F2FE160044BA09 /* QLItem.m in Sources */,
+ 8EBDBD4115F2FE590044BA09 /* TestBedViewController.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 8EF624EA15892BA600A81FD2 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 8EF624F215892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ 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_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 8EF624F315892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 8EF624F515892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 8EF624F615892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F215892BA600A81FD2 /* Debug */,
+ 8EF624F315892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F515892BA600A81FD2 /* Debug */,
+ 8EF624F615892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 8EF624D315892BA600A81FD2 /* Project object */;
+}
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..174a04e
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..3ebddde
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
new file mode 100644
index 0000000..f2a8256
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..252c017
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ SchemeUserState
+
+ HelloWorld.xcscheme
+
+ orderHint
+ 0
+
+
+ SuppressBuildableAutocreation
+
+ 8EF624DB15892BA600A81FD2
+
+ primary
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/.DS_Store b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/.DS_Store
new file mode 100644
index 0000000..8a76a0f
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Cover-320.png b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Cover-320.png
new file mode 100644
index 0000000..ffa0f98
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Cover-320.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Cover-64.png b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Cover-64.png
new file mode 100644
index 0000000..000792c
Binary files /dev/null and b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Cover-64.png differ
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/HelloWorld-Info.plist
new file mode 100644
index 0000000..a2ec0f1
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/HelloWorld-Info.plist
@@ -0,0 +1,125 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${PRODUCT_NAME}
+ CFBundleDocumentTypes
+
+
+ CFBundleTypeIconFiles
+
+ CFBundleTypeName
+ jpg
+ LSHandlerRank
+ Alternate
+ LSItemContentTypes
+
+ public.jpeg
+
+
+
+ CFBundleTypeIconFiles
+
+ CFBundleTypeName
+ text
+ LSHandlerRank
+ Alternate
+ LSItemContentTypes
+
+ public.text
+
+
+
+ CFBundleTypeIconFiles
+
+ CFBundleTypeName
+ Movie
+ LSHandlerRank
+ Alternate
+ LSItemContentTypes
+
+ public.movie
+
+
+
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIcons
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ Icon.png
+ Icon@2x.png
+ Default.png
+ Default@2x.png
+ Icon~ipad.png
+ Icon~ipad@2x.png
+ Default-Portrait~ipad.png
+ Default-Portrait@2x~ipad.png
+ Default-Landscape~ipad.png
+ Default-Landscape@2x~ipad.png
+
+
+
+ CFBundleIdentifier
+ com.sadun.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UTExportedTypeDeclarations
+
+
+ UTTypeConformsTo
+
+ public.text
+
+ UTTypeDescription
+ Cookbook
+ UTTypeIdentifier
+ com.sadun.cookbookfile
+ UTTypeSize320IconFile
+ Cover-320
+ UTTypeSize64IconFile
+ Cover-64
+ UTTypeTagSpecification
+
+ public.filename-extension
+ cookbook
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/HelloWorld-Prefix.pch
new file mode 100644
index 0000000..a7977de
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/HelloWorld-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'HelloWorld' target in the 'HelloWorld' project
+//
+
+#import
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iOS SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import
+ #import
+#endif
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Utility/Utility.h b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Utility/Utility.h
new file mode 100644
index 0000000..4c29d16
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Utility/Utility.h
@@ -0,0 +1,22 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+
+#define LEFTH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]];
+#define TOPV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]];
+
+#define CENTERH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]];
+#define CENTERV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]];
+
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
+
+UIImage *stringImage(NSString *string, UIFont *aFont, CGFloat inset);
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Utility/Utility.m b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Utility/Utility.m
new file mode 100644
index 0000000..622690f
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/Utility/Utility.m
@@ -0,0 +1,37 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+UIImage *stringImage(NSString *string, UIFont *aFont, CGFloat inset)
+{
+ CGSize baseSize = [string sizeWithFont:aFont];
+ CGSize adjustedSize = CGSizeMake(baseSize.width + inset * 2, baseSize.height + inset * 2);
+
+ UIGraphicsBeginImageContext(adjustedSize);
+ CGContextRef context = UIGraphicsGetCurrentContext();
+
+ // Draw white backdrop
+ CGRect bounds = (CGRect){.size = adjustedSize};
+ [[UIColor whiteColor] set];
+ CGContextAddRect(context, bounds);
+ CGContextFillPath(context);
+
+ // Draw a black edge
+ [[UIColor blackColor] set];
+ CGContextAddRect(context, bounds);
+ CGContextSetLineWidth(context, inset);
+ CGContextStrokePath(context);
+
+ // Draw the string in black
+ CGRect insetBounds = CGRectInset(bounds, inset, inset);
+ [string drawInRect:insetBounds withFont:aFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];
+
+ UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+
+ return newImage;
+}
+
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/main.m b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/main.m
new file mode 100644
index 0000000..a816cb7
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/HelloWorld/main.m
@@ -0,0 +1,49 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+
+#import "Utility.h"
+#import "InboxHelper.h"
+#import "TestBedViewController.h"
+
+#pragma mark -
+
+#pragma mark Application Setup
+@interface TestBedAppDelegate : NSObject
+@end
+@implementation TestBedAppDelegate
+{
+ UIWindow *window;
+ TestBedViewController *tbvc;
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application
+{
+ [InboxHelper checkAndProcessInbox];
+ [tbvc scanDocs];
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ // [application setStatusBarHidden:YES];
+ [[UINavigationBar appearance] setTintColor:COOKBOOK_PURPLE_COLOR];
+
+ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ tbvc = [[TestBedViewController alloc] init];
+ UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:tbvc];
+ window.rootViewController = nav;
+ [window makeKeyAndVisible];
+
+ return YES;
+}
+@end
+int main(int argc, char *argv[]) {
+ @autoreleasepool {
+ int retVal = UIApplicationMain(argc, argv, nil, @"TestBedAppDelegate");
+ return retVal;
+ }
+}
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/InboxHelper.h b/C02 - Documents (Take 2)/08 - Doc Requester/InboxHelper.h
new file mode 100644
index 0000000..b6621c2
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/InboxHelper.h
@@ -0,0 +1,16 @@
+//
+// InboxHelper.h
+// HelloWorld
+//
+// Created by Erica Sadun on 8/28/12.
+// Copyright (c) 2012 Erica Sadun. All rights reserved.
+//
+
+#import
+
+#define DOCUMENTS_PATH [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
+#define INBOX_PATH [DOCUMENTS_PATH stringByAppendingPathComponent:@"Inbox"]
+
+@interface InboxHelper : NSObject
++ (void) checkAndProcessInbox;
+@end
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/InboxHelper.m b/C02 - Documents (Take 2)/08 - Doc Requester/InboxHelper.m
new file mode 100644
index 0000000..bb92751
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/InboxHelper.m
@@ -0,0 +1,107 @@
+//
+// InboxHelper.m
+// HelloWorld
+//
+// Created by Erica Sadun on 8/28/12.
+// Copyright (c) 2012 Erica Sadun. All rights reserved.
+//
+
+#import "InboxHelper.h"
+
+@implementation InboxHelper
++ (NSString *) findAlternativeNameForPath: (NSString *) path
+{
+ NSString *ext = path.pathExtension;
+ NSString *base = [path stringByDeletingPathExtension];
+
+ for (int i = 1; i < 999; i++) // we have limits here
+ {
+ NSString *dest = [NSString stringWithFormat:@"%@-%d.%@", base, i, ext];
+ if (![[NSFileManager defaultManager] fileExistsAtPath:dest])
+ return dest;
+ }
+
+ NSLog(@"Exhausted possible names for file %@. Bailing.", path.lastPathComponent);
+ return nil;
+}
+
++ (void) checkAndProcessInbox
+{
+ NSError *error;
+ BOOL success;
+ BOOL isDir;
+
+ // Does the inbox folder exist? If not, we're done here.
+ if (![[NSFileManager defaultManager] fileExistsAtPath:INBOX_PATH isDirectory:&isDir])
+ return;
+
+ // It exists. Is it a dir?
+ if (!isDir)
+ {
+ success = [[NSFileManager defaultManager] removeItemAtPath:INBOX_PATH error:&error];
+ if (!success)
+ {
+ NSLog(@"Error deleting Inbox file (not directory): %@", error.localizedFailureReason);
+ return;
+ }
+ }
+
+ // Load the array of files
+ NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:INBOX_PATH error:&error];
+ if (!fileArray)
+ {
+ NSLog(@"Error reading contents of Inbox: %@", error.localizedFailureReason);
+ return;
+ }
+
+ // Process each file
+ NSUInteger initialCount = fileArray.count;
+ for (NSString *filename in fileArray)
+ {
+ NSString *source = [INBOX_PATH stringByAppendingPathComponent:filename];
+ NSString *dest = [DOCUMENTS_PATH stringByAppendingPathComponent:filename];
+
+ // Is the file already there?
+ BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:dest];
+ if (exists)
+ dest = [self findAlternativeNameForPath:dest];
+
+ if (!dest)
+ {
+ NSLog(@"Error. File name conflict could not be resolved for %@. Bailing", filename);
+ continue;
+ }
+
+ success = [[NSFileManager defaultManager] moveItemAtPath:source toPath:dest error:&error];
+ if (!success)
+ {
+ NSLog(@"Error moving file %@ to Documents from Inbox: %@", filename, error.localizedFailureReason);
+ continue;
+ }
+ }
+
+ // Inbox should now be empty
+ fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:INBOX_PATH error:&error];
+ if (!fileArray)
+ {
+ NSLog(@"Error reading contents of Inbox: %@", error.localizedFailureReason);
+ return;
+ }
+
+ if (fileArray.count)
+ {
+ NSLog(@"Error clearing out inbox. %d items still remain", fileArray.count);
+ return;
+ }
+
+ // Remove the inbox
+ success = [[NSFileManager defaultManager] removeItemAtPath:INBOX_PATH error:&error];
+ if (!success)
+ {
+ NSLog(@"Error removing inbox: %@", error.localizedFailureReason);
+ return;
+ }
+
+ NSLog(@"Moved %d items from the Inbox to the Documents folder", initialCount);
+}
+@end
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/QLItem.h b/C02 - Documents (Take 2)/08 - Doc Requester/QLItem.h
new file mode 100644
index 0000000..1412b88
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/QLItem.h
@@ -0,0 +1,15 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+
+#import
+#import
+
+@interface QuickItem : NSObject
+@property (nonatomic, strong) NSString *path;
+@property (readonly) NSString *previewItemTitle;
+@property (readonly) NSURL *previewItemURL;
+@end
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/QLItem.m b/C02 - Documents (Take 2)/08 - Doc Requester/QLItem.m
new file mode 100644
index 0000000..0efed8f
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/QLItem.m
@@ -0,0 +1,21 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+
+#import "QLItem.h"
+
+@implementation QuickItem
+- (NSString *) previewItemTitle
+{
+ return [_path lastPathComponent];
+}
+
+- (NSURL *) previewItemURL
+{
+ return [NSURL fileURLWithPath:_path];
+}
+@end
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/TestBedViewController.h b/C02 - Documents (Take 2)/08 - Doc Requester/TestBedViewController.h
new file mode 100644
index 0000000..77d2747
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/TestBedViewController.h
@@ -0,0 +1,14 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import
+#import "QLItem.h"
+
+@interface TestBedViewController : UITableViewController
+- (void) scanDocs;
+@end
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/TestBedViewController.m b/C02 - Documents (Take 2)/08 - Doc Requester/TestBedViewController.m
new file mode 100644
index 0000000..6bb0de9
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/TestBedViewController.m
@@ -0,0 +1,112 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import "TestBedViewController.h"
+#import "Utility.h"
+
+#define DOCUMENTS_PATH [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
+
+@implementation TestBedViewController
+{
+ NSArray *items;
+}
+
+// Number of sections
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView
+{
+ return 1;
+}
+
+// Rows per section
+- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
+{
+ return items.count;
+}
+
+- (void) scanDocs
+{
+ items = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:DOCUMENTS_PATH error:nil];
+ [self.tableView reloadData];
+}
+
+// Return a cell for the index path
+- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:@"generic" forIndexPath:indexPath];
+ cell.textLabel.text = [items objectAtIndex:indexPath.row];
+ return cell;
+}
+
+// Support swipe-to-delete
+- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ if (indexPath.row >= items.count)
+ {
+ // Catch Bug Here
+ NSLog(@"System Inconsistency. Requested row %d", indexPath.row);
+ return;
+ }
+
+ // Tried to avoid holding onto that cell -- didn't change the bug
+ NSString *title = [[[self tableView:self.tableView cellForRowAtIndexPath:indexPath] textLabel] text];
+ NSString *path = [DOCUMENTS_PATH stringByAppendingPathComponent:title];
+
+ if (editingStyle == UITableViewCellEditingStyleDelete)
+ {
+ NSError *error;
+ if (![[NSFileManager defaultManager] removeItemAtPath:path error:&error])
+ NSLog(@"Error deleting item %@: %@", path, error.localizedFailureReason);
+ }
+
+ [self scanDocs];
+}
+
+- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
+{
+ return 1;
+}
+
+- (id ) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index;
+{
+ QuickItem *item = [[QuickItem alloc] init];
+
+ NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
+ UITableViewCell *cell = [self tableView:self.tableView cellForRowAtIndexPath:indexPath];
+ NSString *title = cell.textLabel.text;
+ NSString *path = [DOCUMENTS_PATH stringByAppendingPathComponent:title];
+
+ item.path = path;
+ return item;
+}
+
+- (void) push
+{
+ QLPreviewController *controller = [[QLPreviewController alloc] init];
+ controller.dataSource = self;
+ [self.navigationController pushViewController:controller animated:YES];
+}
+
+- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ [self push];
+}
+
+- (void) viewWillAppear:(BOOL)animated
+{
+ NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
+ if (indexPath)
+ [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+}
+
+// Set up table
+- (void) loadView
+{
+ [super loadView];
+ [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"generic"];
+ [self scanDocs];
+}
+@end
+
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/Utility/Utility.h b/C02 - Documents (Take 2)/08 - Doc Requester/Utility/Utility.h
new file mode 100644
index 0000000..4c29d16
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/Utility/Utility.h
@@ -0,0 +1,22 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+
+#define LEFTH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]];
+#define TOPV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]];
+
+#define CENTERH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]];
+#define CENTERV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]];
+
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
+
+UIImage *stringImage(NSString *string, UIFont *aFont, CGFloat inset);
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/08 - Doc Requester/Utility/Utility.m b/C02 - Documents (Take 2)/08 - Doc Requester/Utility/Utility.m
new file mode 100644
index 0000000..622690f
--- /dev/null
+++ b/C02 - Documents (Take 2)/08 - Doc Requester/Utility/Utility.m
@@ -0,0 +1,37 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+UIImage *stringImage(NSString *string, UIFont *aFont, CGFloat inset)
+{
+ CGSize baseSize = [string sizeWithFont:aFont];
+ CGSize adjustedSize = CGSizeMake(baseSize.width + inset * 2, baseSize.height + inset * 2);
+
+ UIGraphicsBeginImageContext(adjustedSize);
+ CGContextRef context = UIGraphicsGetCurrentContext();
+
+ // Draw white backdrop
+ CGRect bounds = (CGRect){.size = adjustedSize};
+ [[UIColor whiteColor] set];
+ CGContextAddRect(context, bounds);
+ CGContextFillPath(context);
+
+ // Draw a black edge
+ [[UIColor blackColor] set];
+ CGContextAddRect(context, bounds);
+ CGContextSetLineWidth(context, inset);
+ CGContextStrokePath(context);
+
+ // Draw the string in black
+ CGRect insetBounds = CGRectInset(bounds, inset, inset);
+ [string drawInRect:insetBounds withFont:aFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];
+
+ UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+
+ return newImage;
+}
+
+
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..269731d
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.pbxproj
@@ -0,0 +1,262 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8EC3D41F15ED4675009375A7 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC3D41E15ED4675009375A7 /* UIKit.framework */; };
+ 8EC3D42115ED4675009375A7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC3D42015ED4675009375A7 /* Foundation.framework */; };
+ 8EC3D42315ED4675009375A7 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC3D42215ED4675009375A7 /* CoreGraphics.framework */; };
+ 8EC3D42915ED4675009375A7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8EC3D42715ED4675009375A7 /* InfoPlist.strings */; };
+ 8EC3D42B15ED4675009375A7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC3D42A15ED4675009375A7 /* main.m */; };
+ 8EC3D43715ED4699009375A7 /* DocWatchHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC3D43615ED4699009375A7 /* DocWatchHelper.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 8EC3D41A15ED4675009375A7 /* DocSender.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DocSender.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8EC3D41E15ED4675009375A7 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 8EC3D42015ED4675009375A7 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 8EC3D42215ED4675009375A7 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 8EC3D42615ED4675009375A7 /* DocSender-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DocSender-Info.plist"; sourceTree = ""; };
+ 8EC3D42815ED4675009375A7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 8EC3D42A15ED4675009375A7 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = DocSender/main.m; sourceTree = ""; };
+ 8EC3D42C15ED4675009375A7 /* DocSender-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DocSender-Prefix.pch"; sourceTree = ""; };
+ 8EC3D43515ED4699009375A7 /* DocWatchHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocWatchHelper.h; sourceTree = ""; };
+ 8EC3D43615ED4699009375A7 /* DocWatchHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DocWatchHelper.m; sourceTree = ""; };
+ 8EC3D43815ED46AC009375A7 /* Utility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Utility.h; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8EC3D41715ED4675009375A7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EC3D41F15ED4675009375A7 /* UIKit.framework in Frameworks */,
+ 8EC3D42115ED4675009375A7 /* Foundation.framework in Frameworks */,
+ 8EC3D42315ED4675009375A7 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 8EC3D40F15ED4675009375A7 = {
+ isa = PBXGroup;
+ children = (
+ 8EC3D42A15ED4675009375A7 /* main.m */,
+ 8EC3D43515ED4699009375A7 /* DocWatchHelper.h */,
+ 8EC3D43615ED4699009375A7 /* DocWatchHelper.m */,
+ 8EC3D43815ED46AC009375A7 /* Utility.h */,
+ 8EC3D42415ED4675009375A7 /* DocSender */,
+ 8EC3D41D15ED4675009375A7 /* Frameworks */,
+ 8EC3D41B15ED4675009375A7 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 8EC3D41B15ED4675009375A7 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8EC3D41A15ED4675009375A7 /* DocSender.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8EC3D41D15ED4675009375A7 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8EC3D41E15ED4675009375A7 /* UIKit.framework */,
+ 8EC3D42015ED4675009375A7 /* Foundation.framework */,
+ 8EC3D42215ED4675009375A7 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 8EC3D42415ED4675009375A7 /* DocSender */ = {
+ isa = PBXGroup;
+ children = (
+ 8EC3D42615ED4675009375A7 /* DocSender-Info.plist */,
+ 8EC3D42715ED4675009375A7 /* InfoPlist.strings */,
+ 8EC3D42C15ED4675009375A7 /* DocSender-Prefix.pch */,
+ );
+ path = DocSender;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8EC3D41915ED4675009375A7 /* DocSender */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8EC3D43215ED4675009375A7 /* Build configuration list for PBXNativeTarget "DocSender" */;
+ buildPhases = (
+ 8EC3D41615ED4675009375A7 /* Sources */,
+ 8EC3D41715ED4675009375A7 /* Frameworks */,
+ 8EC3D41815ED4675009375A7 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = DocSender;
+ productName = DocSender;
+ productReference = 8EC3D41A15ED4675009375A7 /* DocSender.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 8EC3D41115ED4675009375A7 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ ORGANIZATIONNAME = "Erica Sadun";
+ };
+ buildConfigurationList = 8EC3D41415ED4675009375A7 /* Build configuration list for PBXProject "DocSender" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 8EC3D40F15ED4675009375A7;
+ productRefGroup = 8EC3D41B15ED4675009375A7 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8EC3D41915ED4675009375A7 /* DocSender */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8EC3D41815ED4675009375A7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EC3D42915ED4675009375A7 /* InfoPlist.strings in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8EC3D41615ED4675009375A7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EC3D42B15ED4675009375A7 /* main.m in Sources */,
+ 8EC3D43715ED4699009375A7 /* DocWatchHelper.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 8EC3D42715ED4675009375A7 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 8EC3D42815ED4675009375A7 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 8EC3D43015ED4675009375A7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ 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_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 8EC3D43115ED4675009375A7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 8EC3D43315ED4675009375A7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "DocSender/DocSender-Prefix.pch";
+ INFOPLIST_FILE = "DocSender/DocSender-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 8EC3D43415ED4675009375A7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "DocSender/DocSender-Prefix.pch";
+ INFOPLIST_FILE = "DocSender/DocSender-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 8EC3D41415ED4675009375A7 /* Build configuration list for PBXProject "DocSender" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EC3D43015ED4675009375A7 /* Debug */,
+ 8EC3D43115ED4675009375A7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8EC3D43215ED4675009375A7 /* Build configuration list for PBXNativeTarget "DocSender" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EC3D43315ED4675009375A7 /* Debug */,
+ 8EC3D43415ED4675009375A7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 8EC3D41115ED4675009375A7 /* Project object */;
+}
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..3f99b60
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..f1fa7b8
Binary files /dev/null and b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/DocSender.xcscheme b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/DocSender.xcscheme
new file mode 100644
index 0000000..80eae88
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/DocSender.xcscheme
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..afb070f
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ SchemeUserState
+
+ DocSender.xcscheme
+
+ orderHint
+ 0
+
+
+ SuppressBuildableAutocreation
+
+ 8EC3D41915ED4675009375A7
+
+ primary
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/DocSender-Info.plist b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/DocSender-Info.plist
new file mode 100644
index 0000000..0575d0f
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/DocSender-Info.plist
@@ -0,0 +1,47 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${PRODUCT_NAME}
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIdentifier
+ com.sadun.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIFileSharingEnabled
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/DocSender-Prefix.pch b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/DocSender-Prefix.pch
new file mode 100644
index 0000000..0542316
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/DocSender-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'DocSender' target in the 'DocSender' project
+//
+
+#import
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iOS SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import
+ #import
+#endif
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/main.m b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/main.m
new file mode 100644
index 0000000..b7207be
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocSender/main.m
@@ -0,0 +1,153 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import "Utility.h"
+#import "DocWatchHelper.h"
+
+#define DOCUMENTS_PATH [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
+
+@interface TestBedViewController : UITableViewController
+@end
+
+@implementation TestBedViewController
+{
+ NSArray *items;
+ DocWatchHelper *helper;
+ UIDocumentInteractionController *dic;
+ NSURL *fileURL;
+}
+
+
+#pragma mark QuickLook
+- (UIViewController *) documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
+{
+ return self;
+}
+
+- (UIView *) documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller
+{
+ return self.view;
+}
+
+- (CGRect) documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller
+{
+ return self.view.frame;
+}
+
+#pragma mark DIC
+
+- (void) dismissIfNeeded
+{
+ // Proactively dismiss any visible popover
+ if (dic)
+ [dic dismissMenuAnimated:YES];
+}
+
+- (void) documentInteractionControllerDidDismissOptionsMenu: (UIDocumentInteractionController *) controller
+{
+ self.navigationItem.leftBarButtonItem.enabled = YES;
+ dic = nil;
+}
+
+- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ [self dismissIfNeeded];
+
+ UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
+ NSString *title = cell.textLabel.text;
+ NSString *path = [DOCUMENTS_PATH stringByAppendingPathComponent:title];
+
+ if (![[NSFileManager defaultManager] fileExistsAtPath:path])
+ {
+ NSLog(@"File missing. Bailing");
+ return;
+ }
+
+ fileURL = [NSURL fileURLWithPath:path];
+ dic = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
+ dic.delegate = self;
+ [dic presentOptionsMenuFromRect:cell.frame inView:self.tableView animated:YES];
+}
+
+
+#pragma mark -
+
+// Number of sections
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView
+{
+ return 1;
+}
+
+// Rows per section
+- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
+{
+ return items.count;
+}
+
+// Return a cell for the index path
+- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
+ cell.textLabel.text = [items objectAtIndex:indexPath.row];
+ return cell;
+}
+
+- (void) scanDocuments
+{
+ NSString *path = DOCUMENTS_PATH;
+ items = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
+ [self.tableView reloadData];
+}
+
+// Set up table
+- (void) loadView
+{
+ [super loadView];
+
+ [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
+ [self scanDocuments];
+
+ [[NSNotificationCenter defaultCenter] addObserverForName:kDocumentChanged object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification)
+ {
+ // Contents changed
+ [self scanDocuments];
+ }];
+
+ NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
+ helper = [DocWatchHelper watcherForPath:path];
+}
+@end
+
+#pragma mark -
+
+#pragma mark Application Setup
+@interface TestBedAppDelegate : NSObject
+@end
+@implementation TestBedAppDelegate
+{
+ UIWindow *window;
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ // [application setStatusBarHidden:YES];
+ [[UINavigationBar appearance] setTintColor:COOKBOOK_PURPLE_COLOR];
+
+ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ TestBedViewController *tbvc = [[TestBedViewController alloc] init];
+ UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:tbvc];
+ window.rootViewController = nav;
+ [window makeKeyAndVisible];
+ return YES;
+}
+@end
+int main(int argc, char *argv[]) {
+ @autoreleasepool {
+ int retVal = UIApplicationMain(argc, argv, nil, @"TestBedAppDelegate");
+ return retVal;
+ }
+}
\ No newline at end of file
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocWatchHelper.h b/C02 - Documents (Take 2)/08b - Doc Sender/DocWatchHelper.h
new file mode 100644
index 0000000..d84c32d
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocWatchHelper.h
@@ -0,0 +1,10 @@
+#define kDocumentChanged @"DocumentsFolderContentsDidChangeNotification"
+
+@interface DocWatchHelper : NSObject
+{
+ CFFileDescriptorRef kqref;
+ CFRunLoopSourceRef rls;
+}
+@property (strong) NSString *path;
++ (id) watcherForPath: (NSString *) aPath;
+@end
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/DocWatchHelper.m b/C02 - Documents (Take 2)/08b - Doc Sender/DocWatchHelper.m
new file mode 100644
index 0000000..4a405a8
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/DocWatchHelper.m
@@ -0,0 +1,80 @@
+#import "DocWatchHelper.h"
+#import
+#import
+
+@implementation DocWatchHelper
+@synthesize path;
+
+- (void)kqueueFired
+{
+ int kq;
+ struct kevent event;
+ struct timespec timeout = { 0, 0 };
+ int eventCount;
+
+ kq = CFFileDescriptorGetNativeDescriptor(self->kqref);
+ assert(kq >= 0);
+
+ eventCount = kevent(kq, NULL, 0, &event, 1, &timeout);
+ assert( (eventCount >= 0) && (eventCount < 2) );
+
+ if (eventCount == 1)
+ [[NSNotificationCenter defaultCenter] postNotificationName:kDocumentChanged object:self];
+
+ CFFileDescriptorEnableCallBacks(self->kqref, kCFFileDescriptorReadCallBack);
+}
+
+static void KQCallback(CFFileDescriptorRef kqRef, CFOptionFlags callBackTypes, void *info)
+{
+ DocWatchHelper *helper = (DocWatchHelper *)(__bridge id)(CFTypeRef) info;
+ [helper kqueueFired];
+}
+
+- (void) beginGeneratingDocumentNotificationsInPath: (NSString *) docPath
+{
+ int dirFD;
+ int kq;
+ int retVal;
+ struct kevent eventToAdd;
+ CFFileDescriptorContext context = { 0, (void *)(__bridge CFTypeRef) self, NULL, NULL, NULL };
+
+ dirFD = open([docPath fileSystemRepresentation], O_EVTONLY);
+ assert(dirFD >= 0);
+
+ kq = kqueue();
+ assert(kq >= 0);
+
+ eventToAdd.ident = dirFD;
+ eventToAdd.filter = EVFILT_VNODE;
+ eventToAdd.flags = EV_ADD | EV_CLEAR;
+ eventToAdd.fflags = NOTE_WRITE;
+ eventToAdd.data = 0;
+ eventToAdd.udata = NULL;
+
+ retVal = kevent(kq, &eventToAdd, 1, NULL, 0, NULL);
+ assert(retVal == 0);
+
+ self->kqref = CFFileDescriptorCreate(NULL, kq, true, KQCallback, &context);
+ rls = CFFileDescriptorCreateRunLoopSource(NULL, self->kqref, 0);
+ assert(rls != NULL);
+
+ CFRunLoopAddSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
+ CFRelease(rls);
+ CFFileDescriptorEnableCallBacks(self->kqref, kCFFileDescriptorReadCallBack);
+}
+
+- (void) dealloc
+{
+ self.path = nil;
+ CFRunLoopRemoveSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
+ CFFileDescriptorDisableCallBacks(self->kqref, kCFFileDescriptorReadCallBack);
+}
+
++ (id) watcherForPath: (NSString *) aPath
+{
+ DocWatchHelper *watcher = [[self alloc] init];
+ watcher.path = aPath;
+ [watcher beginGeneratingDocumentNotificationsInPath:aPath];
+ return watcher;
+}
+@end
diff --git a/C02 - Documents (Take 2)/08b - Doc Sender/Utility.h b/C02 - Documents (Take 2)/08b - Doc Sender/Utility.h
new file mode 100644
index 0000000..354fa97
--- /dev/null
+++ b/C02 - Documents (Take 2)/08b - Doc Sender/Utility.h
@@ -0,0 +1,20 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+
+#define LEFTH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]];
+#define TOPV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]];
+
+#define CENTERH(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]];
+#define CENTERV(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]];
+
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/.DS_Store b/C02 - Documents (Take 2)/09 - Custom URL Scheme/.DS_Store
new file mode 100644
index 0000000..42ea12d
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/.DS_Store b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/.DS_Store differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Landscape@2x~ipad.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Landscape@2x~ipad.png
new file mode 100644
index 0000000..cd947e7
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Landscape@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Landscape~ipad.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Landscape~ipad.png
new file mode 100644
index 0000000..45b897a
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Landscape~ipad.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Portrait@2x~ipad.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Portrait@2x~ipad.png
new file mode 100644
index 0000000..2ec5306
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Portrait@2x~ipad.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Portrait~ipad.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Portrait~ipad.png
new file mode 100644
index 0000000..3a349cc
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default-Portrait~ipad.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default.png
new file mode 100644
index 0000000..2f91416
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default@2x.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default@2x.png
new file mode 100644
index 0000000..5de3b4a
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Default@2x.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-144.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-144.png
new file mode 100644
index 0000000..897c834
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-144.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-72.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-72.png
new file mode 100644
index 0000000..7267560
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-72.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small-100.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small-100.png
new file mode 100644
index 0000000..4fed549
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small-100.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small-50.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small-50.png
new file mode 100644
index 0000000..e207c5e
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small-50.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small.png
new file mode 100644
index 0000000..ff6af41
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small@2x.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small@2x.png
new file mode 100644
index 0000000..8a62eeb
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon-Small@2x.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon.png
new file mode 100644
index 0000000..8aba049
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon@2x.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon@2x.png
new file mode 100644
index 0000000..fea5531
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon@2x.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon~ipad.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon~ipad.png
new file mode 100644
index 0000000..7abf98c
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon~ipad.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon~ipad@2x.png b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon~ipad@2x.png
new file mode 100644
index 0000000..4621619
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/AppArt/Icon~ipad@2x.png differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.pbxproj b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..d1e19e9
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.pbxproj
@@ -0,0 +1,309 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF0D158B9B4800F96828 /* Icon.png */; };
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */; };
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */; };
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */; };
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */; };
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF14158B9B7900F96828 /* Default.png */; };
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF15158B9B7900F96828 /* Default@2x.png */; };
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF16158B9B7900F96828 /* Icon@2x.png */; };
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */; };
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */; };
+ 8EE7D0F515D843680026D7B9 /* Notes in Resources */ = {isa = PBXBuildFile; fileRef = 8EE7D0F415D843680026D7B9 /* Notes */; };
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E015892BA600A81FD2 /* UIKit.framework */; };
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E215892BA600A81FD2 /* Foundation.framework */; };
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */; };
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8EF624E915892BA600A81FD2 /* InfoPlist.strings */; };
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF624EC15892BA600A81FD2 /* main.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = AppArt/Icon.png; sourceTree = ""; };
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "AppArt/Default-Landscape@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "AppArt/Default-Landscape~ipad.png"; sourceTree = ""; };
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "AppArt/Default-Portrait@2x~ipad.png"; sourceTree = ""; };
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait~ipad.png"; path = "AppArt/Default-Portrait~ipad.png"; sourceTree = ""; };
+ 8EB9BF14158B9B7900F96828 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = AppArt/Default.png; sourceTree = ""; };
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "AppArt/Default@2x.png"; sourceTree = ""; };
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "AppArt/Icon@2x.png"; sourceTree = ""; };
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad.png"; path = "AppArt/Icon~ipad.png"; sourceTree = ""; };
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon~ipad@2x.png"; path = "AppArt/Icon~ipad@2x.png"; sourceTree = ""; };
+ 8EE7D0F415D843680026D7B9 /* Notes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Notes; sourceTree = ""; };
+ 8EE9B88F15B746C400F4FCCA /* Utility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Utility.h; sourceTree = ""; };
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HelloWorld-Info.plist"; sourceTree = ""; };
+ 8EF624EA15892BA600A81FD2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 8EF624EC15892BA600A81FD2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; };
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HelloWorld-Prefix.pch"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8EF624D915892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624E115892BA600A81FD2 /* UIKit.framework in Frameworks */,
+ 8EF624E315892BA600A81FD2 /* Foundation.framework in Frameworks */,
+ 8EF624E515892BA600A81FD2 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 8EF624D115892BA600A81FD2 = {
+ isa = PBXGroup;
+ children = (
+ 8EF624EC15892BA600A81FD2 /* main.m */,
+ 8EF624E715892BA600A81FD2 /* Supporting Files */,
+ 8EF624DF15892BA600A81FD2 /* Frameworks */,
+ 8EF624DD15892BA600A81FD2 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 8EF624DD15892BA600A81FD2 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624DC15892BA600A81FD2 /* HelloWorld.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8EF624DF15892BA600A81FD2 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8EF624E015892BA600A81FD2 /* UIKit.framework */,
+ 8EF624E215892BA600A81FD2 /* Foundation.framework */,
+ 8EF624E415892BA600A81FD2 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 8EF624E715892BA600A81FD2 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 8EE9B88F15B746C400F4FCCA /* Utility.h */,
+ 8EE7D0F415D843680026D7B9 /* Notes */,
+ 8EF6250B15892CDA00A81FD2 /* System Art */,
+ 8EF624E815892BA600A81FD2 /* HelloWorld-Info.plist */,
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */,
+ 8EF624EE15892BA600A81FD2 /* HelloWorld-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ path = HelloWorld;
+ sourceTree = "";
+ };
+ 8EF6250B15892CDA00A81FD2 /* System Art */ = {
+ isa = PBXGroup;
+ children = (
+ 8EB9BF0D158B9B4800F96828 /* Icon.png */,
+ 8EB9BF10158B9B7900F96828 /* Default-Landscape@2x~ipad.png */,
+ 8EB9BF11158B9B7900F96828 /* Default-Landscape~ipad.png */,
+ 8EB9BF12158B9B7900F96828 /* Default-Portrait@2x~ipad.png */,
+ 8EB9BF13158B9B7900F96828 /* Default-Portrait~ipad.png */,
+ 8EB9BF14158B9B7900F96828 /* Default.png */,
+ 8EB9BF15158B9B7900F96828 /* Default@2x.png */,
+ 8EB9BF16158B9B7900F96828 /* Icon@2x.png */,
+ 8EB9BF17158B9B7900F96828 /* Icon~ipad.png */,
+ 8EB9BF18158B9B7900F96828 /* Icon~ipad@2x.png */,
+ );
+ name = "System Art";
+ path = ..;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */;
+ buildPhases = (
+ 8EF624D815892BA600A81FD2 /* Sources */,
+ 8EF624D915892BA600A81FD2 /* Frameworks */,
+ 8EF624DA15892BA600A81FD2 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HelloWorld;
+ productName = HelloWorld;
+ productReference = 8EF624DC15892BA600A81FD2 /* HelloWorld.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 8EF624D315892BA600A81FD2 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ ORGANIZATIONNAME = "Erica Sadun";
+ };
+ buildConfigurationList = 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 8EF624D115892BA600A81FD2;
+ productRefGroup = 8EF624DD15892BA600A81FD2 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8EF624DB15892BA600A81FD2 /* HelloWorld */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8EF624DA15892BA600A81FD2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624EB15892BA600A81FD2 /* InfoPlist.strings in Resources */,
+ 8EB9BF0E158B9B4800F96828 /* Icon.png in Resources */,
+ 8EB9BF19158B9B7900F96828 /* Default-Landscape@2x~ipad.png in Resources */,
+ 8EB9BF1A158B9B7900F96828 /* Default-Landscape~ipad.png in Resources */,
+ 8EB9BF1B158B9B7900F96828 /* Default-Portrait@2x~ipad.png in Resources */,
+ 8EB9BF1C158B9B7900F96828 /* Default-Portrait~ipad.png in Resources */,
+ 8EB9BF1D158B9B7900F96828 /* Default.png in Resources */,
+ 8EB9BF1E158B9B7900F96828 /* Default@2x.png in Resources */,
+ 8EB9BF1F158B9B7900F96828 /* Icon@2x.png in Resources */,
+ 8EB9BF20158B9B7900F96828 /* Icon~ipad.png in Resources */,
+ 8EB9BF21158B9B7900F96828 /* Icon~ipad@2x.png in Resources */,
+ 8EE7D0F515D843680026D7B9 /* Notes in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8EF624D815892BA600A81FD2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8EF624ED15892BA600A81FD2 /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 8EF624E915892BA600A81FD2 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 8EF624EA15892BA600A81FD2 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 8EF624F215892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ 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_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 8EF624F315892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 8EF624F515892BA600A81FD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 8EF624F615892BA600A81FD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "HelloWorld/HelloWorld-Prefix.pch";
+ INFOPLIST_FILE = "HelloWorld/HelloWorld-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 8EF624D615892BA600A81FD2 /* Build configuration list for PBXProject "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F215892BA600A81FD2 /* Debug */,
+ 8EF624F315892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8EF624F415892BA600A81FD2 /* Build configuration list for PBXNativeTarget "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8EF624F515892BA600A81FD2 /* Debug */,
+ 8EF624F615892BA600A81FD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 8EF624D315892BA600A81FD2 /* Project object */;
+}
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..174a04e
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..8ec7443
Binary files /dev/null and b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/ericasadun.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
new file mode 100644
index 0000000..f2a8256
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/HelloWorld.xcscheme
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..252c017
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld.xcodeproj/xcuserdata/ericasadun.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ SchemeUserState
+
+ HelloWorld.xcscheme
+
+ orderHint
+ 0
+
+
+ SuppressBuildableAutocreation
+
+ 8EF624DB15892BA600A81FD2
+
+ primary
+
+
+
+
+
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/HelloWorld-Info.plist b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/HelloWorld-Info.plist
new file mode 100644
index 0000000..8328cea
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/HelloWorld-Info.plist
@@ -0,0 +1,76 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${PRODUCT_NAME}
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIcons
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ Icon.png
+ Icon@2x.png
+ Default.png
+ Default@2x.png
+ Icon~ipad.png
+ Icon~ipad@2x.png
+ Default-Portrait~ipad.png
+ Default-Portrait@2x~ipad.png
+ Default-Landscape~ipad.png
+ Default-Landscape@2x~ipad.png
+
+
+
+ CFBundleIdentifier
+ com.sadun.${PRODUCT_NAME:rfc1034identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleURLTypes
+
+
+ CFBundleURLName
+ com.sadun.urlSchemeDemonstration
+ CFBundleURLSchemes
+
+ xyz
+
+
+
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+ UIInterfaceOrientationPortraitUpsideDown
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/HelloWorld-Prefix.pch b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/HelloWorld-Prefix.pch
new file mode 100644
index 0000000..a7977de
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/HelloWorld-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'HelloWorld' target in the 'HelloWorld' project
+//
+
+#import
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iOS SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import
+ #import
+#endif
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/Notes b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/Notes
new file mode 100644
index 0000000..e69de29
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/Utility.h b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/Utility.h
new file mode 100644
index 0000000..0ee0e9f
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/Utility.h
@@ -0,0 +1,106 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#pragma mark - Cookbook
+#define COOKBOOK_PURPLE_COLOR [UIColor colorWithRed:0.20392f green:0.19607f blue:0.61176f alpha:1.0f]
+
+#pragma mark - Bar Buttons
+#define BARBUTTON(TITLE, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+#define SYSBARBUTTON(ITEM, SELECTOR) [[UIBarButtonItem alloc] initWithBarButtonSystemItem:ITEM target:self action:SELECTOR]
+#define IMGBARBUTTON(IMAGE, SELECTOR) [[UIBarButtonItem alloc] initWithImage:IMAGE style:UIBarButtonItemStylePlain target:self action:SELECTOR]
+#define CUSTOMBARBUTTON(VIEW) [[UIBarButtonItem alloc] initWithCustomView:VIEW]
+
+#define SYSBARBUTTON_TARGET(ITEM, TARGET, SELECTOR) [[UIBarButtonItem alloc] initWithBarButtonSystemItem:ITEM target:TARGET action:SELECTOR]
+#define BARBUTTON_TARGET(TITLE, TARGET, SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:TARGET action:SELECTOR]
+
+#pragma mark - Platform
+#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
+
+#pragma mark - Orientation
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait(self.interfaceOrientation)
+// #define IS_PORTRAIT UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation) || UIDeviceOrientationIsPortrait(self.interfaceOrientation)
+
+#pragma mark - Debug
+#define BOOL_CHECK(TITLE, CHECK_ITEM) printf("%s: %s\n", TITLE, (CHECK_ITEM) ? "Yes" : "No")
+
+#pragma mark - Geometry
+#define RECTCENTER(RECT) CGPointMake(CGRectGetMidX(RECT), CGRectGetMidY(RECT))
+#define RECT_PT(_X_, _Y_) CGRectMake(_X_, _Y_, 0.0f, 0.0f)
+#define RECT_SIZE(_W_, _H_) CGRectMake(0.0f, 0.0f, _W_, _H_)
+
+#pragma mark - Autosizing
+#define RESIZABLE(VIEW) [VIEW setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth]
+
+#pragma mark - Strings
+#define STREQ(STRING1, STRING2) ([STRING1 caseInsensitiveCompare:STRING2] == NSOrderedSame)
+#define PREFIXED(STRING1, STRING2) ([[STRING1 uppercaseString] hasPrefix:[STRING2 uppercaseString]])
+#define TRIMSTRING(STRING) ([STRING stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]])
+#define PADSTRING(STRING) ([NSString stringWithFormat:@" %@ ", TRIMSTRING(STRING)])
+
+#define STRDATA(STRING) ([STRING dataUsingEncoding:NSUTF8StringEncoding])
+#define DATASTR(DATA) ([[NSString alloc] initWithData:DATA encoding:NSUTF8StringEncoding])
+
+#define RECTSTRING(_aRect_) NSStringFromCGRect(_aRect_)
+#define POINTSTRING(_aPoint_) NSStringFromCGPoint(_aPoint_)
+#define SIZESTRING(_aSize_) NSStringFromCGSize(_aSize_)
+
+#pragma mark - Constraints
+#define PREPCONSTRAINTS(VIEW) [VIEW setTranslatesAutoresizingMaskIntoConstraints:NO]
+#define CONSTRAIN(PARENT, VIEW, FORMAT) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW)]]
+#define CONSTRAIN_VIEWS(PARENT, FORMAT, BINDINGS) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(FORMAT) options:0 metrics:nil views:BINDINGS]]
+
+// Stretch across axes
+#define STRETCH_VIEW_H(PARENT, VIEW) CONSTRAIN(PARENT, VIEW, @"H:|["#VIEW"(>=0)]|")
+#define STRETCH_VIEW_V(PARENT, VIEW) CONSTRAIN(PARENT, VIEW, @"V:|["#VIEW"(>=0)]|")
+#define STRETCH_VIEW(PARENT, VIEW) {STRETCH_VIEW_H(PARENT, VIEW); STRETCH_VIEW_V(PARENT, VIEW);}
+
+// Center along axes
+#define CENTER_VIEW_H(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]]
+#define CENTER_VIEW_V(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]]
+#define CENTER_VIEW(PARENT, VIEW) {CENTER_VIEW_H(PARENT, VIEW); CENTER_VIEW_V(PARENT, VIEW);}
+
+// Align to parent
+#define ALIGN_VIEW_LEFT(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_RIGHT(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeRight multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_TOP(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]]
+#define ALIGN_VIEW_BOTTOM(PARENT, VIEW) [PARENT addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute: NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:PARENT attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]
+
+// Set Size
+#define CONSTRAIN_WIDTH(VIEW, WIDTH) CONSTRAIN(VIEW, VIEW, @"H:["#VIEW"(=="#WIDTH")]")
+#define CONSTRAIN_HEIGHT(VIEW, HEIGHT) CONSTRAIN(VIEW, VIEW, @"V:["#VIEW"(=="#HEIGHT")]")
+#define CONSTRAIN_SIZE(VIEW, HEIGHT, WIDTH) {CONSTRAIN_WIDTH(VIEW, WIDTH); CONSTRAIN_HEIGHT(VIEW, HEIGHT);}
+
+// Set Aspect
+#define CONSTRAIN_ASPECT(VIEW, ASPECT) [VIEW addConstraint:[NSLayoutConstraint constraintWithItem:VIEW attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:VIEW attribute:NSLayoutAttributeHeight multiplier:(ASPECT) constant:0.0f]]
+
+// Order items
+#define CONSTRAIN_ORDER_H(PARENT, VIEW1, VIEW2) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(@"H:["#VIEW1"]->=0-["#VIEW2"]") options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW1, VIEW2)]]
+#define CONSTRAIN_ORDER_V(PARENT, VIEW1, VIEW2) [PARENT addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:(@"V:["#VIEW1"]->=0-["#VIEW2"]") options:0 metrics:nil views:NSDictionaryOfVariableBindings(VIEW1, VIEW2)]]
+
+#pragma mark - Defaults
+
+// Defaults
+#define DEFAULT_INT(_KEY_) [[NSUserDefaults standardUserDefaults] integerForKey:_KEY_]
+#define DEFAULT_OBJ(_KEY_) [[NSUserDefaults standardUserDefaults] objectForKey:_KEY_]
+
+#pragma mark - Util
+
+// Bail with complaint
+#define COMPLAIN_AND_BAIL(_COMPLAINT_, _ARG_) {NSLog(_COMPLAINT_, _ARG_); return;}
+#define COMPLAIN_AND_BAIL_NIL(_COMPLAINT_, _ARG_) {NSLog(_COMPLAINT_, _ARG_); return nil;}
+
+#pragma mark - Delegates and Controls
+
+// Delegate
+#define SAFE_PERFORM_WITH_ARG(THE_OBJECT, THE_SELECTOR, THE_ARG) (([THE_OBJECT respondsToSelector:THE_SELECTOR]) ? [THE_OBJECT performSelector:THE_SELECTOR withObject:THE_ARG] : nil)
+
+// Controls
+#define CALLBACK_VAL(_CONTROL_, _SELECTOR_) [_CONTROL_ addTarget:self action:_SELECTOR_ forControlEvents:UIControlEventValueChanged]
+#define CALLBACK_PRESS(_CONTROL_, _SELECTOR_) [_CONTROL_ addTarget:self action:_SELECTOR_ forControlEvents:UIControlEventTouchUpInside]
+#define SAFE_CALLBACK_VAL(_CONTROL_, _SELECTOR_) {if ([self respondsToSelector:_SELECTOR_]) CALLBACK_VAL(_CONTROL_, _SELECTOR_);}
+#define SAFE_CALLBACK_PRESS(_CONTROL_, _SELECTOR_) {if ([self respondsToSelector:_SELECTOR_]) CALLBACK_PRESS(_CONTROL_, _SELECTOR_);}
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/en.lproj/InfoPlist.strings b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/main.m b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/main.m
new file mode 100644
index 0000000..5b28ba8
--- /dev/null
+++ b/C02 - Documents (Take 2)/09 - Custom URL Scheme/HelloWorld/main.m
@@ -0,0 +1,66 @@
+/*
+ Erica Sadun, http://ericasadun.com
+ iPhone Developer's Cookbook, 6.x Edition
+ BSD License, Use at your own risk
+ */
+
+#import
+#import "Utility.h"
+
+@interface TestBedViewController : UIViewController
+@property (nonatomic, readonly) UITextView *textView;
+@end
+
+@implementation TestBedViewController
+- (void) loadView
+{
+ [super loadView];
+ self.view.backgroundColor = [UIColor whiteColor];
+
+ _textView = [[UITextView alloc] init];
+ _textView.editable = NO;
+ _textView.font = [UIFont fontWithName:@"Futura" size:18.0f];
+ _textView.text = @"";
+ [self.view addSubview:_textView];
+
+ PREPCONSTRAINTS(_textView);
+ STRETCH_VIEW(self.view, _textView);
+}
+@end
+
+#pragma mark - Application Setup -
+@interface TestBedAppDelegate : NSObject
+@end
+@implementation TestBedAppDelegate
+{
+ UIWindow *window;
+ TestBedViewController *tbvc;
+}
+
+- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
+{
+ NSString *logString = [NSString stringWithFormat:@"DID OPEN: URL[%@] App[%@] Annotation[%@]\n", url, sourceApplication, annotation];
+ tbvc.textView.text = [logString stringByAppendingString:tbvc.textView.text];
+ return YES;
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ // [application setStatusBarHidden:YES];
+ [[UINavigationBar appearance] setTintColor:COOKBOOK_PURPLE_COLOR];
+
+ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ tbvc = [[TestBedViewController alloc] init];
+
+ UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:tbvc];
+ window.rootViewController = nav;
+ [window makeKeyAndVisible];
+ return YES;
+}
+@end
+int main(int argc, char *argv[]) {
+ @autoreleasepool {
+ int retVal = UIApplicationMain(argc, argv, nil, @"TestBedAppDelegate");
+ return retVal;
+ }
+}
\ No newline at end of file
diff --git a/C02 - Documents/01 - UTI Utilities b/C02 - Documents/01 - UTI Utilities
deleted file mode 160000
index 46e53d2..0000000
--- a/C02 - Documents/01 - UTI Utilities
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 46e53d2949b464008b0c50d25582b1a14fb9a11a
diff --git a/C02 - Documents/02 - Passive Pasting b/C02 - Documents/02 - Passive Pasting
deleted file mode 160000
index 46e53d2..0000000
--- a/C02 - Documents/02 - Passive Pasting
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 46e53d2949b464008b0c50d25582b1a14fb9a11a
diff --git a/C02 - Documents/03 - Monitoring b/C02 - Documents/03 - Monitoring
deleted file mode 160000
index 46e53d2..0000000
--- a/C02 - Documents/03 - Monitoring
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 46e53d2949b464008b0c50d25582b1a14fb9a11a
diff --git a/C02 - Documents/07 - Basic DIC b/C02 - Documents/07 - Basic DIC
deleted file mode 160000
index 46e53d2..0000000
--- a/C02 - Documents/07 - Basic DIC
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 46e53d2949b464008b0c50d25582b1a14fb9a11a
diff --git a/C02 - Documents/08 - Doc Requester b/C02 - Documents/08 - Doc Requester
deleted file mode 160000
index 46e53d2..0000000
--- a/C02 - Documents/08 - Doc Requester
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 46e53d2949b464008b0c50d25582b1a14fb9a11a
diff --git a/C02 - Documents/08b - Doc Sender b/C02 - Documents/08b - Doc Sender
deleted file mode 160000
index 7ed5400..0000000
--- a/C02 - Documents/08b - Doc Sender
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 7ed5400b29beff3dba93b31bc8ca1fa3d90b3747
diff --git a/C02 - Documents/09 - Custom URL Scheme b/C02 - Documents/09 - Custom URL Scheme
deleted file mode 160000
index 46e53d2..0000000
--- a/C02 - Documents/09 - Custom URL Scheme
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 46e53d2949b464008b0c50d25582b1a14fb9a11a