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