Permalink
Browse files

Complete overhaul: Version 2.0

  • Loading branch information...
1 parent d7e726e commit 74c09808a8da9603cd1cbbe6a14ae619bfd50663 @danielamitay committed Oct 22, 2012
Showing with 1,930 additions and 548 deletions.
  1. +371 −0 Example Project/iHasAppExample.xcodeproj/project.pbxproj
  2. 0 ...pExample → Example Project}/iHasAppExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  3. BIN ....xcodeproj/project.xcworkspace/xcuserdata/danielamitay.xcuserdatad/UserInterfaceState.xcuserstate
  4. +5 −4 ...t}/iHasAppExample.xcodeproj/xcuserdata/danielamitay.xcuserdatad/xcschemes/iHasAppExample.xcscheme
  5. +1 −1 ...}/iHasAppExample.xcodeproj/xcuserdata/danielamitay.xcuserdatad/xcschemes/xcschememanagement.plist
  6. +2 −2 {iHasAppExample → Example Project}/iHasAppExample/AppDelegate.h
  7. +2 −6 {iHasAppExample → Example Project}/iHasAppExample/AppDelegate.m
  8. BIN Example Project/iHasAppExample/Default-568h@2x.png
  9. BIN Example Project/iHasAppExample/Default.png
  10. BIN Example Project/iHasAppExample/Default@2x.png
  11. +2 −2 {iHasAppExample → Example Project}/iHasAppExample/DetailViewController.h
  12. +8 −8 {iHasAppExample → Example Project}/iHasAppExample/DetailViewController.m
  13. +2 −2 {iHasAppExample → Example Project}/iHasAppExample/MasterViewController.h
  14. +54 −74 {iHasAppExample → Example Project}/iHasAppExample/MasterViewController.m
  15. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDImageCache.h
  16. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDImageCache.m
  17. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDImageCacheDelegate.h
  18. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageCompat.h
  19. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageDecoder.h
  20. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageDecoder.m
  21. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageDownloader.h
  22. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageDownloader.m
  23. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageDownloaderDelegate.h
  24. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageManager.h
  25. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageManager.m
  26. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImageManagerDelegate.h
  27. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImagePrefetcher.h
  28. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/SDWebImagePrefetcher.m
  29. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/UIImageView+WebCache.h
  30. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/UIImageView+WebCache.m
  31. 0 {iHasAppExample → Example Project}/iHasAppExample/SDWebImage/placeholder-icon.png
  32. 0 {iHasAppExample → Example Project}/iHasAppExample/en.lproj/InfoPlist.strings
  33. +11 −1 {iHasAppExample → Example Project}/iHasAppExample/iHasAppExample-Info.plist
  34. 0 {iHasAppExample → Example Project}/iHasAppExample/iHasAppExample-Prefix.pch
  35. +3 −4 {iHasAppExample → Example Project}/iHasAppExample/main.m
  36. +30 −10 README.md
  37. +34 −0 com.iHasApp.iHasApp.docset/Contents/Info.plist
  38. +605 −0 com.iHasApp.iHasApp.docset/Contents/Resources/Documents/Classes/iHasApp.html
  39. +584 −0 com.iHasApp.iHasApp.docset/Contents/Resources/Documents/css/styles.css
  40. +22 −0 com.iHasApp.iHasApp.docset/Contents/Resources/Documents/css/stylesPrint.css
  41. +70 −0 com.iHasApp.iHasApp.docset/Contents/Resources/Documents/hierarchy.html
  42. BIN com.iHasApp.iHasApp.docset/Contents/Resources/Documents/img/button_bar_background.png
  43. BIN com.iHasApp.iHasApp.docset/Contents/Resources/Documents/img/disclosure.png
  44. BIN com.iHasApp.iHasApp.docset/Contents/Resources/Documents/img/disclosure_open.png
  45. BIN com.iHasApp.iHasApp.docset/Contents/Resources/Documents/img/library_background.png
  46. BIN com.iHasApp.iHasApp.docset/Contents/Resources/Documents/img/title_background.png
  47. +66 −0 com.iHasApp.iHasApp.docset/Contents/Resources/Documents/index.html
  48. BIN com.iHasApp.iHasApp.docset/Contents/Resources/docSet.dsidx
  49. BIN com.iHasApp.iHasApp.docset/Contents/Resources/docSet.mom
  50. BIN com.iHasApp.iHasApp.docset/Contents/Resources/docSet.skidx
  51. BIN com.iHasApp.iHasApp.docset/Contents/Resources/docSet.toc
  52. +58 −78 iHasApp.framework/Versions/A/Headers/iHasApp.h
  53. BIN iHasApp.framework/Versions/A/Resources/Info.plist
  54. 0 iHasApp.framework/Versions/A/Resources/{ → en.lproj}/InfoPlist.strings
  55. BIN iHasApp.framework/Versions/A/Resources/iHasApp-Info.plist
  56. BIN iHasApp.framework/Versions/A/iHasApp
  57. +0 −356 iHasAppExample/iHasAppExample.xcodeproj/project.pbxproj
  58. BIN ....xcodeproj/project.xcworkspace/xcuserdata/danielamitay.xcuserdatad/UserInterfaceState.xcuserstate
View
371 Example Project/iHasAppExample.xcodeproj/project.pbxproj
@@ -0,0 +1,371 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 63FF2FD5163485580054D385 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63FF2FD4163485580054D385 /* UIKit.framework */; };
+ 63FF2FD7163485580054D385 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63FF2FD6163485580054D385 /* Foundation.framework */; };
+ 63FF2FD9163485580054D385 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63FF2FD8163485580054D385 /* CoreGraphics.framework */; };
+ 63FF2FDF163485590054D385 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 63FF2FDD163485590054D385 /* InfoPlist.strings */; };
+ 63FF2FE1163485590054D385 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF2FE0163485590054D385 /* main.m */; };
+ 63FF2FE5163485590054D385 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF2FE4163485590054D385 /* AppDelegate.m */; };
+ 63FF2FE7163485590054D385 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 63FF2FE6163485590054D385 /* Default.png */; };
+ 63FF2FE9163485590054D385 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 63FF2FE8163485590054D385 /* Default@2x.png */; };
+ 63FF2FEB163485590054D385 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 63FF2FEA163485590054D385 /* Default-568h@2x.png */; };
+ 63FF2FEE163485590054D385 /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF2FED163485590054D385 /* MasterViewController.m */; };
+ 63FF2FF1163485590054D385 /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF2FF0163485590054D385 /* DetailViewController.m */; };
+ 63FF3005163486B00054D385 /* iHasApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63FF3004163486B00054D385 /* iHasApp.framework */; };
+ 63FF30181634870B0054D385 /* placeholder-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 63FF30071634870B0054D385 /* placeholder-icon.png */; };
+ 63FF30191634870B0054D385 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF30091634870B0054D385 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+ 63FF301A1634870B0054D385 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF300D1634870B0054D385 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+ 63FF301B1634870B0054D385 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF300F1634870B0054D385 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+ 63FF301C1634870B0054D385 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF30121634870B0054D385 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+ 63FF301D1634870B0054D385 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF30151634870B0054D385 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+ 63FF301E1634870B0054D385 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FF30171634870B0054D385 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 63FF2FD0163485580054D385 /* iHasAppExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iHasAppExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 63FF2FD4163485580054D385 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 63FF2FD6163485580054D385 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 63FF2FD8163485580054D385 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 63FF2FDC163485590054D385 /* iHasAppExample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iHasAppExample-Info.plist"; sourceTree = "<group>"; };
+ 63FF2FDE163485590054D385 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ 63FF2FE0163485590054D385 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 63FF2FE2163485590054D385 /* iHasAppExample-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iHasAppExample-Prefix.pch"; sourceTree = "<group>"; };
+ 63FF2FE3163485590054D385 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ 63FF2FE4163485590054D385 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+ 63FF2FE6163485590054D385 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
+ 63FF2FE8163485590054D385 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = "<group>"; };
+ 63FF2FEA163485590054D385 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
+ 63FF2FEC163485590054D385 /* MasterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MasterViewController.h; sourceTree = "<group>"; };
+ 63FF2FED163485590054D385 /* MasterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MasterViewController.m; sourceTree = "<group>"; };
+ 63FF2FEF163485590054D385 /* DetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = "<group>"; };
+ 63FF2FF0163485590054D385 /* DetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = "<group>"; };
+ 63FF3004163486B00054D385 /* iHasApp.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iHasApp.framework; path = ../iHasApp.framework; sourceTree = "<group>"; };
+ 63FF30071634870B0054D385 /* placeholder-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholder-icon.png"; sourceTree = "<group>"; };
+ 63FF30081634870B0054D385 /* SDImageCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDImageCache.h; sourceTree = "<group>"; };
+ 63FF30091634870B0054D385 /* SDImageCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCache.m; sourceTree = "<group>"; };
+ 63FF300A1634870B0054D385 /* SDImageCacheDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDImageCacheDelegate.h; sourceTree = "<group>"; };
+ 63FF300B1634870B0054D385 /* SDWebImageCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageCompat.h; sourceTree = "<group>"; };
+ 63FF300C1634870B0054D385 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDecoder.h; sourceTree = "<group>"; };
+ 63FF300D1634870B0054D385 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDecoder.m; sourceTree = "<group>"; };
+ 63FF300E1634870B0054D385 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloader.h; sourceTree = "<group>"; };
+ 63FF300F1634870B0054D385 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloader.m; sourceTree = "<group>"; };
+ 63FF30101634870B0054D385 /* SDWebImageDownloaderDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloaderDelegate.h; sourceTree = "<group>"; };
+ 63FF30111634870B0054D385 /* SDWebImageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageManager.h; sourceTree = "<group>"; };
+ 63FF30121634870B0054D385 /* SDWebImageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageManager.m; sourceTree = "<group>"; };
+ 63FF30131634870B0054D385 /* SDWebImageManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageManagerDelegate.h; sourceTree = "<group>"; };
+ 63FF30141634870B0054D385 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImagePrefetcher.h; sourceTree = "<group>"; };
+ 63FF30151634870B0054D385 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImagePrefetcher.m; sourceTree = "<group>"; };
+ 63FF30161634870B0054D385 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+WebCache.h"; sourceTree = "<group>"; };
+ 63FF30171634870B0054D385 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+WebCache.m"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 63FF2FCD163485580054D385 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 63FF2FD5163485580054D385 /* UIKit.framework in Frameworks */,
+ 63FF2FD7163485580054D385 /* Foundation.framework in Frameworks */,
+ 63FF2FD9163485580054D385 /* CoreGraphics.framework in Frameworks */,
+ 63FF3005163486B00054D385 /* iHasApp.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 63FF2FC5163485580054D385 = {
+ isa = PBXGroup;
+ children = (
+ 63FF2FDA163485590054D385 /* iHasAppExample */,
+ 63FF2FD3163485580054D385 /* Frameworks */,
+ 63FF2FD1163485580054D385 /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ 63FF2FD1163485580054D385 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 63FF2FD0163485580054D385 /* iHasAppExample.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 63FF2FD3163485580054D385 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 63FF2FD4163485580054D385 /* UIKit.framework */,
+ 63FF2FD6163485580054D385 /* Foundation.framework */,
+ 63FF2FD8163485580054D385 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 63FF2FDA163485590054D385 /* iHasAppExample */ = {
+ isa = PBXGroup;
+ children = (
+ 63FF30031634869E0054D385 /* iHasApp */,
+ 63FF30061634870B0054D385 /* SDWebImage */,
+ 63FF2FE3163485590054D385 /* AppDelegate.h */,
+ 63FF2FE4163485590054D385 /* AppDelegate.m */,
+ 63FF2FEC163485590054D385 /* MasterViewController.h */,
+ 63FF2FED163485590054D385 /* MasterViewController.m */,
+ 63FF2FEF163485590054D385 /* DetailViewController.h */,
+ 63FF2FF0163485590054D385 /* DetailViewController.m */,
+ 63FF2FDB163485590054D385 /* Supporting Files */,
+ );
+ path = iHasAppExample;
+ sourceTree = "<group>";
+ };
+ 63FF2FDB163485590054D385 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 63FF2FDC163485590054D385 /* iHasAppExample-Info.plist */,
+ 63FF2FDD163485590054D385 /* InfoPlist.strings */,
+ 63FF2FE0163485590054D385 /* main.m */,
+ 63FF2FE2163485590054D385 /* iHasAppExample-Prefix.pch */,
+ 63FF2FE6163485590054D385 /* Default.png */,
+ 63FF2FE8163485590054D385 /* Default@2x.png */,
+ 63FF2FEA163485590054D385 /* Default-568h@2x.png */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ 63FF30031634869E0054D385 /* iHasApp */ = {
+ isa = PBXGroup;
+ children = (
+ 63FF3004163486B00054D385 /* iHasApp.framework */,
+ );
+ name = iHasApp;
+ path = ..;
+ sourceTree = "<group>";
+ };
+ 63FF30061634870B0054D385 /* SDWebImage */ = {
+ isa = PBXGroup;
+ children = (
+ 63FF30071634870B0054D385 /* placeholder-icon.png */,
+ 63FF30081634870B0054D385 /* SDImageCache.h */,
+ 63FF30091634870B0054D385 /* SDImageCache.m */,
+ 63FF300A1634870B0054D385 /* SDImageCacheDelegate.h */,
+ 63FF300B1634870B0054D385 /* SDWebImageCompat.h */,
+ 63FF300C1634870B0054D385 /* SDWebImageDecoder.h */,
+ 63FF300D1634870B0054D385 /* SDWebImageDecoder.m */,
+ 63FF300E1634870B0054D385 /* SDWebImageDownloader.h */,
+ 63FF300F1634870B0054D385 /* SDWebImageDownloader.m */,
+ 63FF30101634870B0054D385 /* SDWebImageDownloaderDelegate.h */,
+ 63FF30111634870B0054D385 /* SDWebImageManager.h */,
+ 63FF30121634870B0054D385 /* SDWebImageManager.m */,
+ 63FF30131634870B0054D385 /* SDWebImageManagerDelegate.h */,
+ 63FF30141634870B0054D385 /* SDWebImagePrefetcher.h */,
+ 63FF30151634870B0054D385 /* SDWebImagePrefetcher.m */,
+ 63FF30161634870B0054D385 /* UIImageView+WebCache.h */,
+ 63FF30171634870B0054D385 /* UIImageView+WebCache.m */,
+ );
+ path = SDWebImage;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 63FF2FCF163485580054D385 /* iHasAppExample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 63FF3000163485590054D385 /* Build configuration list for PBXNativeTarget "iHasAppExample" */;
+ buildPhases = (
+ 63FF2FCC163485580054D385 /* Sources */,
+ 63FF2FCD163485580054D385 /* Frameworks */,
+ 63FF2FCE163485580054D385 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = iHasAppExample;
+ productName = iHasAppExample;
+ productReference = 63FF2FD0163485580054D385 /* iHasAppExample.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 63FF2FC7163485580054D385 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ ORGANIZATIONNAME = "Objective-See";
+ };
+ buildConfigurationList = 63FF2FCA163485580054D385 /* Build configuration list for PBXProject "iHasAppExample" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 63FF2FC5163485580054D385;
+ productRefGroup = 63FF2FD1163485580054D385 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 63FF2FCF163485580054D385 /* iHasAppExample */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 63FF2FCE163485580054D385 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 63FF2FDF163485590054D385 /* InfoPlist.strings in Resources */,
+ 63FF2FE7163485590054D385 /* Default.png in Resources */,
+ 63FF2FE9163485590054D385 /* Default@2x.png in Resources */,
+ 63FF2FEB163485590054D385 /* Default-568h@2x.png in Resources */,
+ 63FF30181634870B0054D385 /* placeholder-icon.png in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 63FF2FCC163485580054D385 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 63FF2FE1163485590054D385 /* main.m in Sources */,
+ 63FF2FE5163485590054D385 /* AppDelegate.m in Sources */,
+ 63FF2FEE163485590054D385 /* MasterViewController.m in Sources */,
+ 63FF2FF1163485590054D385 /* DetailViewController.m in Sources */,
+ 63FF30191634870B0054D385 /* SDImageCache.m in Sources */,
+ 63FF301A1634870B0054D385 /* SDWebImageDecoder.m in Sources */,
+ 63FF301B1634870B0054D385 /* SDWebImageDownloader.m in Sources */,
+ 63FF301C1634870B0054D385 /* SDWebImageManager.m in Sources */,
+ 63FF301D1634870B0054D385 /* SDWebImagePrefetcher.m in Sources */,
+ 63FF301E1634870B0054D385 /* UIImageView+WebCache.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 63FF2FDD163485590054D385 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 63FF2FDE163485590054D385 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 63FF2FFE163485590054D385 /* 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_EMPTY_BODY = 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;
+ };
+ 63FF2FFF163485590054D385 /* 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_EMPTY_BODY = 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;
+ };
+ 63FF3001163485590054D385 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/..\"",
+ );
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "iHasAppExample/iHasAppExample-Prefix.pch";
+ INFOPLIST_FILE = "iHasAppExample/iHasAppExample-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 63FF3002163485590054D385 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/..\"",
+ );
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "iHasAppExample/iHasAppExample-Prefix.pch";
+ INFOPLIST_FILE = "iHasAppExample/iHasAppExample-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 63FF2FCA163485580054D385 /* Build configuration list for PBXProject "iHasAppExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 63FF2FFE163485590054D385 /* Debug */,
+ 63FF2FFF163485590054D385 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 63FF3000163485590054D385 /* Build configuration list for PBXNativeTarget "iHasAppExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 63FF3001163485590054D385 /* Debug */,
+ 63FF3002163485590054D385 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 63FF2FC7163485580054D385 /* Project object */;
+}
View
0 ...ject.xcworkspace/contents.xcworkspacedata → ...ject.xcworkspace/contents.xcworkspacedata
File renamed without changes.
View
BIN ...oj/project.xcworkspace/xcuserdata/danielamitay.xcuserdatad/UserInterfaceState.xcuserstate
Binary file not shown.
View
9 ...erdatad/xcschemes/iHasAppExample.xcscheme → ...erdatad/xcschemes/iHasAppExample.xcscheme
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
+ LastUpgradeVersion = "0450"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -13,7 +14,7 @@
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
- BlueprintIdentifier = "634F3C2A1593C41900D6361C"
+ BlueprintIdentifier = "63FF2FCF163485580054D385"
BuildableName = "iHasAppExample.app"
BlueprintName = "iHasAppExample"
ReferencedContainer = "container:iHasAppExample.xcodeproj">
@@ -31,7 +32,7 @@
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
- BlueprintIdentifier = "634F3C2A1593C41900D6361C"
+ BlueprintIdentifier = "63FF2FCF163485580054D385"
BuildableName = "iHasAppExample.app"
BlueprintName = "iHasAppExample"
ReferencedContainer = "container:iHasAppExample.xcodeproj">
@@ -50,7 +51,7 @@
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
- BlueprintIdentifier = "634F3C2A1593C41900D6361C"
+ BlueprintIdentifier = "63FF2FCF163485580054D385"
BuildableName = "iHasAppExample.app"
BlueprintName = "iHasAppExample"
ReferencedContainer = "container:iHasAppExample.xcodeproj">
@@ -68,7 +69,7 @@
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
- BlueprintIdentifier = "634F3C2A1593C41900D6361C"
+ BlueprintIdentifier = "63FF2FCF163485580054D385"
BuildableName = "iHasAppExample.app"
BlueprintName = "iHasAppExample"
ReferencedContainer = "container:iHasAppExample.xcodeproj">
View
2 ...rdatad/xcschemes/xcschememanagement.plist → ...rdatad/xcschemes/xcschememanagement.plist
@@ -12,7 +12,7 @@
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
- <key>634F3C2A1593C41900D6361C</key>
+ <key>63FF2FCF163485580054D385</key>
<dict>
<key>primary</key>
<true/>
View
4 iHasAppExample/iHasAppExample/AppDelegate.h → Example Project/iHasAppExample/AppDelegate.h
@@ -2,8 +2,8 @@
// AppDelegate.h
// iHasAppExample
//
-// Created by Daniel Amitay on 6/21/12.
-// Copyright (c) 2012 Objective-See, LLC. All rights reserved.
+// Created by Daniel Amitay on 10/21/12.
+// Copyright (c) 2012 Objective-See. All rights reserved.
//
#import <UIKit/UIKit.h>
View
8 iHasAppExample/iHasAppExample/AppDelegate.m → Example Project/iHasAppExample/AppDelegate.m
@@ -2,8 +2,8 @@
// AppDelegate.m
// iHasAppExample
//
-// Created by Daniel Amitay on 6/21/12.
-// Copyright (c) 2012 Objective-See, LLC. All rights reserved.
+// Created by Daniel Amitay on 10/21/12.
+// Copyright (c) 2012 Objective-See. All rights reserved.
//
#import "AppDelegate.h"
@@ -14,10 +14,6 @@
@implementation AppDelegate
-@synthesize window = _window;
-@synthesize navigationController = _navigationController;
-@synthesize splitViewController = _splitViewController;
-
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
View
BIN Example Project/iHasAppExample/Default-568h@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN Example Project/iHasAppExample/Default.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN Example Project/iHasAppExample/Default@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
4 ...ple/iHasAppExample/DetailViewController.h → ...ect/iHasAppExample/DetailViewController.h
@@ -2,8 +2,8 @@
// DetailViewController.h
// iHasAppExample
//
-// Created by Daniel Amitay on 6/21/12.
-// Copyright (c) 2012 Objective-See, LLC. All rights reserved.
+// Created by Daniel Amitay on 10/21/12.
+// Copyright (c) 2012 Objective-See. All rights reserved.
//
#import <UIKit/UIKit.h>
View
16 ...ple/iHasAppExample/DetailViewController.m → ...ect/iHasAppExample/DetailViewController.m
@@ -2,8 +2,8 @@
// DetailViewController.m
// iHasAppExample
//
-// Created by Daniel Amitay on 6/21/12.
-// Copyright (c) 2012 Objective-See, LLC. All rights reserved.
+// Created by Daniel Amitay on 10/21/12.
+// Copyright (c) 2012 Objective-See. All rights reserved.
//
#import "DetailViewController.h"
@@ -32,7 +32,7 @@ - (void)setAppDictionary:(NSDictionary *)appDictionary
if (self.masterPopoverController != nil)
{
[self.masterPopoverController dismissPopoverAnimated:YES];
- }
+ }
}
- (void)configureView
@@ -48,7 +48,7 @@ - (void)configureView
{
self.title = nil;
}
-
+
}
- (void)viewDidLoad
@@ -100,8 +100,8 @@ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInte
}
else
{
- return nil;
- }
+ return nil;
+ }
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
@@ -137,8 +137,8 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa
CGSize maxSize = CGSizeMake(self.view.bounds.size.width - 20.0f, 999.0f);
CGSize labelSize = [value sizeWithFont:[UIFont systemFontOfSize:14.0f]
- constrainedToSize:maxSize
- lineBreakMode:UILineBreakModeTailTruncation];
+ constrainedToSize:maxSize
+ lineBreakMode:NSLineBreakByTruncatingTail];
return (labelSize.height + 30.0f);
}
View
4 ...ple/iHasAppExample/MasterViewController.h → ...ect/iHasAppExample/MasterViewController.h
@@ -2,8 +2,8 @@
// MasterViewController.h
// iHasAppExample
//
-// Created by Daniel Amitay on 6/21/12.
-// Copyright (c) 2012 Objective-See, LLC. All rights reserved.
+// Created by Daniel Amitay on 10/21/12.
+// Copyright (c) 2012 Objective-See. All rights reserved.
//
#import <UIKit/UIKit.h>
View
128 ...ple/iHasAppExample/MasterViewController.m → ...ect/iHasAppExample/MasterViewController.m
@@ -2,8 +2,8 @@
// MasterViewController.m
// iHasAppExample
//
-// Created by Daniel Amitay on 6/21/12.
-// Copyright (c) 2012 Objective-See, LLC. All rights reserved.
+// Created by Daniel Amitay on 10/21/12.
+// Copyright (c) 2012 Objective-See. All rights reserved.
//
#import "MasterViewController.h"
@@ -14,21 +14,19 @@
#import <iHasApp/iHasApp.h>
-@interface MasterViewController () <iHasAppDelegate>
-{
- iHasApp *appEngine;
- NSArray *detectedApps;
-}
+@interface MasterViewController ()
+
+@property (nonatomic, strong) iHasApp *detectionObject;
+@property (nonatomic, strong) NSArray *detectedApps;
+
@end
@implementation MasterViewController
-@synthesize detailViewController = _detailViewController;
-
- (void)viewDidLoad
{
[super viewDidLoad];
-
+
self.title = @"Apps";
self.tableView.rowHeight = 57.0f;
@@ -43,79 +41,61 @@ - (void)viewDidLoad
action:@selector(detectApps)];
self.navigationItem.rightBarButtonItem = rightBarButtonItem;
- #warning Replace YOUR-API-KEY accordingly
- appEngine = [[iHasApp alloc] initWithDelegate:self andKey:@"YOUR-API-KEY"];
- appEngine.country = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
+ self.detectionObject = [[iHasApp alloc] init];
+
[self detectApps];
}
-- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
-{
- if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
- {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
- else
- {
- return YES;
- }
-}
-
#pragma mark - iHasApp methods
- (void)detectApps
{
+ if ([UIApplication sharedApplication].networkActivityIndicatorVisible)
+ {
+ return;
+ }
if (self.detailViewController)
{
self.detailViewController.appDictionary = nil;
}
- [appEngine beginDetection];
- NSLog(@"appDetectionDidBegin");
- detectedApps = nil;
+
+ NSLog(@"Detection begun!");
+ [self.detectionObject detectAppDictionariesWithIncremental:^(NSArray *appDictionaries) {
+
+ NSLog(@"Incremental appDictionaries.count: %i", appDictionaries.count);
+ NSMutableArray *newAppDictionaries = [NSMutableArray arrayWithArray:self.detectedApps];
+ [newAppDictionaries addObjectsFromArray:appDictionaries];
+ self.detectedApps = newAppDictionaries;
+ [self.tableView reloadData];
+
+ } withSuccess:^(NSArray *appDictionaries) {
+
+ NSLog(@"Successful appDictionaries.count: %i", appDictionaries.count);
+ self.detectedApps = appDictionaries;
+ [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
+ [self.tableView reloadData];
+
+ } withFailure:^(NSError *error) {
+
+ NSLog(@"Error: %@", error.localizedDescription);
+ self.detectedApps = [NSArray array];
+ [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
+ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
+ message:error.localizedDescription
+ delegate:nil
+ cancelButtonTitle:@"OK"
+ otherButtonTitles:nil];
+ [alertView show];
+ [self.tableView reloadData];
+
+ }];
+
+ self.detectedApps = nil;
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[self.tableView reloadData];
}
-- (void)appDetectionDidSucceed:(NSArray *)appsDetected
-{
- NSLog(@"appDetectionDidSucceed:");
- detectedApps = appsDetected;
- [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
- [self.tableView reloadData];
-}
-- (void)appDetectionDidFail:(iHasAppError)detectionError
-{
- NSLog(@"appDetectionDidFail:");
- detectedApps = [NSArray array];
- [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
-
- NSString *error;
- switch (detectionError)
- {
- case iHasAppErrorUnknown:
- error = @"iHasAppError: Unknown";
- break;
- case iHasAppErrorConnection:
- error = @"iHasAppError: Connection";
- break;
- case iHasAppErrorInvalidKey:
- error = @"iHasAppError: InvalidKey";
- break;
- case iHasAppErrorReachedLimit:
- error = @"iHasAppError: ReachedLimit";
- break;
-
- default:
- break;
- }
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:error
- message:nil
- delegate:nil
- cancelButtonTitle:@"OK"
- otherButtonTitles:nil];
- [alertView show];
-}
#pragma mark - Table View
@@ -126,19 +106,19 @@ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
- if(detectedApps)
+ if(self.detectedApps)
{
- return [NSString stringWithFormat:@"%i Apps Detected", [[appEngine detectedApps] count]];
+ return [NSString stringWithFormat:@"%i Apps Detected", self.detectedApps.count];
}
else
{
- return @"Detection in progress...";
- }
+ return @"Detection in progress...";
+ }
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
- return detectedApps.count;
+ return self.detectedApps.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
@@ -160,7 +140,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
}
}
- NSDictionary *appDictionary = [detectedApps objectAtIndex:indexPath.row];
+ NSDictionary *appDictionary = [self.detectedApps objectAtIndex:indexPath.row];
NSString *trackName = [appDictionary objectForKey:@"trackName"];
NSString *trackId = [[appDictionary objectForKey:@"trackId"] description];
@@ -177,7 +157,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
- NSDictionary *appDictionary = [detectedApps objectAtIndex:indexPath.row];
+ NSDictionary *appDictionary = [self.detectedApps objectAtIndex:indexPath.row];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
if (!self.detailViewController)
View
0 .../iHasAppExample/SDWebImage/SDImageCache.h → .../iHasAppExample/SDWebImage/SDImageCache.h
File renamed without changes.
View
0 .../iHasAppExample/SDWebImage/SDImageCache.m → .../iHasAppExample/SDWebImage/SDImageCache.m
File renamed without changes.
View
0 ...Example/SDWebImage/SDImageCacheDelegate.h → ...Example/SDWebImage/SDImageCacheDelegate.h
File renamed without changes.
View
0 ...sAppExample/SDWebImage/SDWebImageCompat.h → ...sAppExample/SDWebImage/SDWebImageCompat.h
File renamed without changes.
View
0 ...AppExample/SDWebImage/SDWebImageDecoder.h → ...AppExample/SDWebImage/SDWebImageDecoder.h
File renamed without changes.
View
0 ...AppExample/SDWebImage/SDWebImageDecoder.m → ...AppExample/SDWebImage/SDWebImageDecoder.m
File renamed without changes.
View
0 ...Example/SDWebImage/SDWebImageDownloader.h → ...Example/SDWebImage/SDWebImageDownloader.h
File renamed without changes.
View
0 ...Example/SDWebImage/SDWebImageDownloader.m → ...Example/SDWebImage/SDWebImageDownloader.m
File renamed without changes.
View
0 ...SDWebImage/SDWebImageDownloaderDelegate.h → ...SDWebImage/SDWebImageDownloaderDelegate.h
File renamed without changes.
View
0 ...AppExample/SDWebImage/SDWebImageManager.h → ...AppExample/SDWebImage/SDWebImageManager.h
File renamed without changes.
View
0 ...AppExample/SDWebImage/SDWebImageManager.m → ...AppExample/SDWebImage/SDWebImageManager.m
File renamed without changes.
View
0 ...le/SDWebImage/SDWebImageManagerDelegate.h → ...le/SDWebImage/SDWebImageManagerDelegate.h
File renamed without changes.
View
0 ...Example/SDWebImage/SDWebImagePrefetcher.h → ...Example/SDWebImage/SDWebImagePrefetcher.h
File renamed without changes.
View
0 ...Example/SDWebImage/SDWebImagePrefetcher.m → ...Example/SDWebImage/SDWebImagePrefetcher.m
File renamed without changes.
View
0 ...Example/SDWebImage/UIImageView+WebCache.h → ...Example/SDWebImage/UIImageView+WebCache.h
File renamed without changes.
View
0 ...Example/SDWebImage/UIImageView+WebCache.m → ...Example/SDWebImage/UIImageView+WebCache.m
File renamed without changes.
View
0 ...ppExample/SDWebImage/placeholder-icon.png → ...ppExample/SDWebImage/placeholder-icon.png
File renamed without changes
View
0 ...iHasAppExample/en.lproj/InfoPlist.strings → ...iHasAppExample/en.lproj/InfoPlist.strings
File renamed without changes.
View
12 .../iHasAppExample/iHasAppExample-Info.plist → .../iHasAppExample/iHasAppExample-Info.plist
@@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
- <string>${PRODUCT_NAME}</string>
+ <string>iHasApp</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
@@ -28,6 +28,16 @@
<array>
<string>armv7</string>
</array>
+ <key>UIStatusBarTintParameters</key>
+ <dict>
+ <key>UINavigationBar</key>
+ <dict>
+ <key>Style</key>
+ <string>UIBarStyleDefault</string>
+ <key>Translucent</key>
+ <false/>
+ </dict>
+ </dict>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
View
0 .../iHasAppExample/iHasAppExample-Prefix.pch → .../iHasAppExample/iHasAppExample-Prefix.pch
File renamed without changes.
View
7 iHasAppExample/iHasAppExample/main.m → Example Project/iHasAppExample/main.m
@@ -2,8 +2,8 @@
// main.m
// iHasAppExample
//
-// Created by Daniel Amitay on 6/21/12.
-// Copyright (c) 2012 Objective-See, LLC. All rights reserved.
+// Created by Daniel Amitay on 10/21/12.
+// Copyright (c) 2012 Objective-See. All rights reserved.
//
#import <UIKit/UIKit.h>
@@ -12,8 +12,7 @@
int main(int argc, char *argv[])
{
- @autoreleasepool
- {
+ @autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
View
40 README.md
@@ -3,38 +3,58 @@ iHasApp Framework
The iHasApp iOS Framework allows you to detect installed apps on a user's device.
+Detection results can be in the form of an array of detected appIds, or an array of appDictionaries from the iTunes Search API.
+
Basic Setup
-----------
-1. Sign up for a free account on [iHasApp.com](https://www.ihasapp.com) to receive your api key.
+1. Add iHasApp.framework to your project and ensure that it is linked to the project target.
+
+2. Add `#import <iHasApp/iHasApp.h>` to the classes in which you wish to access iHasApp.
+
+3. Initialize and begin detection methods.
-2. Add iHasApp.framework to your project and ensure that it is linked to the project target.
+Example code:
-3. Add `#import <iHasApp/iHasApp.h>` to the files in which you wish to access iHasApp.
+```objective-c
+iHasApp *detectionObject = [[iHasApp alloc] init];
+[detectionObject detectAppDictionariesWithIncremental:^(NSArray *appDictionaries) {
+ NSLog(@"Incremental appDictionaries.count: %i", appDictionaries.count);
+} withSuccess:^(NSArray *appDictionaries) {
+ NSLog(@"Successful appDictionaries.count: %i", appDictionaries.count);
+} withFailure:^(NSError *error) {
+ NSLog(@"Failure: %@", error.localizedDescription);
+}];
+```
+
+Requirements
+-----------
-4. Initialize and configure the iHasApp object.
+- iOS base SDK 5.0+
+- Internet connectivity
App Store Safe
--------------
-The iHasApp framework utilizes only public, documented, and non-deprecated APIs. It is completely App Store safe.
-There are already a number of approved apps on the App Store that have integrated iHasApp.
+The iHasApp framework utilizes only public, documented, and non-deprecated APIs. It is completely App Store safe. There are already a number of approved apps on the App Store that have integrated iHasApp.
Like all things, it is always a prudent idea to either ask your users' permission or to include a clause in your EULA.
Example Application
--------------
-This framework comes with a demo application that demonstrates initialization, country configuration (automatically grabbing the device's current locale), delegate methods, and information display. You will need to insert your own API key in the '-viewDidLoad' section of 'MasterViewController.m'.
+This framework comes with an example application that demonstrates detection initialization and information display.
The iHasAppExample project uses Olivier Poitrey's [SDWebImage](https://github.com/rs/SDWebImage) project to asynchronously display the app icons.
Documentation
--------------
-The 'iHasApp.h' header file is structurally commented. If you would like to see the Appledoc representation, visit the [iHasApp Documentation](https://www.ihasapp.com/documentation).
+The `iHasApp.h` header file is structurally commented. If you would like to see the Appledoc representation, visit the [iHasApp Documentation](http://www.ihasapp.com/documentation).
-Troubleshooting
+Info & Support
--------------
-Feel free to contact me at daniel@ihasapp.com
+Website: [iHasApp](http://www.ihasapp.com)
+Author: [Daniel Amitay](https://github.com/danielamitay)
+Email: daniel@ihasapp.com
View
34 com.iHasApp.iHasApp.docset/Contents/Info.plist
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleIdentifier</key>
+ <string>com.iHasApp.iHasApp</string>
+ <key>CFBundleName</key>
+ <string>iHasApp Documentation</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+
+
+
+
+ <key>DocSetFeedName</key>
+ <string>iHasApp Documentation</string>
+
+ <key>DocSetMinimumXcodeVersion</key>
+ <string>3.0</string>
+
+ <key>DashDocSetFamily</key>
+ <string>appledoc</string>
+ <key>DocSetPublisherIdentifier</key>
+ <string>com.iHasApp.documentation</string>
+ <key>DocSetPublisherName</key>
+ <string>Objective-See, LLC</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>Copyright © 2012 Objective-See, LLC. All rights reserved.</string>
+</dict>
+</plist>
View
605 com.iHasApp.iHasApp.docset/Contents/Resources/Documents/Classes/iHasApp.html
@@ -0,0 +1,605 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
+ <title>iHasApp Class Reference</title>
+ <meta id="xcode-display" name="xcode-display" content="render"/>
+ <meta name="viewport" content="width=550" />
+ <link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
+ <link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
+ <meta name="generator" content="appledoc 2.0.5 (build 789)" />
+ </head>
+ <body>
+ <header id="top_header">
+ <div id="library" class="hideInXcode">
+ <h1><a id="libraryTitle" href="../index.html">iHasApp </a></h1>
+ <a id="developerHome" href="../index.html">Objective-See, LLC</a>
+ </div>
+
+ <div id="title" role="banner">
+ <h1 class="hideInXcode">iHasApp Class Reference</h1>
+ </div>
+ <ul id="headerButtons" role="toolbar">
+ <li id="toc_button">
+ <button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
+ </li>
+ <li id="jumpto_button" role="navigation">
+ <select id="jumpTo">
+ <option value="top">Jump To&#133;</option>
+
+ <option value="overview">Overview</option>
+
+
+
+
+ <option value="tasks">Tasks</option>
+
+
+
+
+
+ <option value="properties">Properties</option>
+
+ <option value="//api/name/country">&nbsp;&nbsp;&nbsp;&nbsp;country</option>
+
+
+
+
+
+
+ <option value="instance_methods">Instance Methods</option>
+
+ <option value="//api/name/detectAppDictionariesWithIncremental:withSuccess:withFailure:">&nbsp;&nbsp;&nbsp;&nbsp;- detectAppDictionariesWithIncremental:withSuccess:withFailure:</option>
+
+ <option value="//api/name/detectAppIdsWithIncremental:withSuccess:withFailure:">&nbsp;&nbsp;&nbsp;&nbsp;- detectAppIdsWithIncremental:withSuccess:withFailure:</option>
+
+ <option value="//api/name/retrieveAppDictionariesForAppIds:withSuccess:withFailure:">&nbsp;&nbsp;&nbsp;&nbsp;- retrieveAppDictionariesForAppIds:withSuccess:withFailure:</option>
+
+
+
+</select>
+ </li>
+ </ul>
+ </header>
+ <nav id="tocContainer" class="isShowingTOC">
+ <ul id="toc" role="tree">
+
+<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
+
+
+
+
+<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
+
+ <li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Properties">Properties</a></span></li>
+
+ <li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Detection Methods">Detection Methods</a></span></li>
+
+ <li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Informational Methods">Informational Methods</a></span></li>
+
+</ul></li>
+
+
+
+
+
+<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
+
+ <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/country">country</a></span></li>
+
+</ul></li>
+
+
+
+
+
+<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
+
+ <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/detectAppDictionariesWithIncremental:withSuccess:withFailure:">detectAppDictionariesWithIncremental:withSuccess:withFailure:</a></span></li>
+
+ <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/detectAppIdsWithIncremental:withSuccess:withFailure:">detectAppIdsWithIncremental:withSuccess:withFailure:</a></span></li>
+
+ <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/retrieveAppDictionariesForAppIds:withSuccess:withFailure:">retrieveAppDictionariesForAppIds:withSuccess:withFailure:</a></span></li>
+
+</ul></li>
+
+
+ </ul>
+ </nav>
+ <article>
+ <div id="contents" class="isShowingTOC" role="main">
+ <a title="iHasApp Class Reference" name="top"></a>
+ <div class="main-navigation navigation-top">
+ <ul>
+ <li><a href="../index.html">Index</a></li>
+ <li><a href="../hierarchy.html">Hierarchy</a></li>
+</ul>
+ </div>
+ <div id="header">
+ <div class="section-header">
+ <h1 class="title title-header">iHasApp Class Reference</h1>
+ </div>
+ </div>
+ <div id="container">
+
+ <div class="section section-specification"><table cellspacing="0"><tbody>
+ <tr>
+ <td class="specification-title">Inherits from</td>
+ <td class="specification-value">NSObject</td>
+</tr><tr>
+ <td class="specification-title">Declared in</td>
+ <td class="specification-value">iHasApp.h</td>
+</tr>
+ </tbody></table></div>
+
+
+
+
+ <div class="section section-overview">
+ <a title="Overview" name="overview"></a>
+ <h2 class="subtitle subtitle-overview">Overview</h2>
+ <p>The <code>iHasApp</code> class is used to perform on-device app detection. It can return detected appIds, or perform additional API calls and return detected appDictionaries.</p>
+
+<p>See <a href="http://www.iHasApp.com/">http://www.iHasApp.com/</a> for information and updates.</p>
+
+<p><em>Requirements:</em> iOS base SDK 5.0+, Internet connectivity</p>
+ </div>
+
+
+
+
+
+ <div class="section section-tasks">
+ <a title="Tasks" name="tasks"></a>
+ <h2 class="subtitle subtitle-tasks">Tasks</h2>
+
+
+ <a title="Properties" name="task_Properties"></a>
+ <h3 class="subsubtitle task-title">Properties</h3>
+
+ <ul class="task-list">
+ <li>
+ <span class="tooltip">
+ <code><a href="#//api/name/country">&nbsp;&nbsp;country</a></code>
+ <span class="tooltip"><p>The two-letter country code for the store you want to search. The search uses the default store front for the specified country. Default is [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode].</p></span>
+ </span>
+ <span class="task-item-suffix">property</span>
+
+</li>
+ </ul>
+
+
+ <a title="Detection Methods" name="task_Detection Methods"></a>
+ <h3 class="subsubtitle task-title">Detection Methods</h3>
+
+ <ul class="task-list">
+ <li>
+ <span class="tooltip">
+ <code><a href="#//api/name/detectAppIdsWithIncremental:withSuccess:withFailure:">&ndash;&nbsp;detectAppIdsWithIncremental:withSuccess:withFailure:</a></code>
+ <span class="tooltip"><p>Starts an appId detection process.</p></span>
+ </span>
+
+
+</li><li>
+ <span class="tooltip">
+ <code><a href="#//api/name/detectAppDictionariesWithIncremental:withSuccess:withFailure:">&ndash;&nbsp;detectAppDictionariesWithIncremental:withSuccess:withFailure:</a></code>
+ <span class="tooltip"><p>Starts an appDictionary detection process.</p></span>
+ </span>
+
+
+</li>
+ </ul>
+
+
+ <a title="Informational Methods" name="task_Informational Methods"></a>
+ <h3 class="subsubtitle task-title">Informational Methods</h3>
+
+ <ul class="task-list">
+ <li>
+ <span class="tooltip">
+ <code><a href="#//api/name/retrieveAppDictionariesForAppIds:withSuccess:withFailure:">&ndash;&nbsp;retrieveAppDictionariesForAppIds:withSuccess:withFailure:</a></code>
+ <span class="tooltip"><p>Returns the associated App Store information for the desired apps.</p></span>
+ </span>
+
+
+</li>
+ </ul>
+
+ </div>
+
+
+
+
+
+ <div class="section section-methods">
+ <a title="Properties" name="properties"></a>
+ <h2 class="subtitle subtitle-methods">Properties</h2>
+
+ <div class="section-method">
+ <a name="//api/name/country" title="country"></a>
+ <h3 class="subsubtitle method-title">country</h3>
+
+
+
+ <div class="method-subsection brief-description">
+ <p>The two-letter country code for the store you want to search. The search uses the default store front for the specified country. Default is [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode].</p>
+ </div>
+
+
+
+ <div class="method-subsection method-declaration"><code>@property (nonatomic, strong) NSString *country</code></div>
+
+
+
+
+
+
+
+
+
+ <div class="method-subsection discussion-section">
+ <h4 class="method-subtitle">Discussion</h4>
+ <p>See <a href="http://en.wikipedia.org/wiki/ISO">http://en.wikipedia.org/wiki/ISO</a>_3166-1_alpha-2 for a list of ISO Country Codes.</p>
+
+<pre><code>//To determine device-specific country codes, use:
+NSString *countryCode = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
+</code></pre>
+ </div>
+
+
+
+
+
+
+
+ <div class="method-subsection declared-in-section">
+ <h4 class="method-subtitle">Declared In</h4>
+ <code class="declared-in-ref">iHasApp.h</code><br />
+ </div>
+
+
+</div>
+
+ </div>
+
+
+
+
+
+ <div class="section section-methods">
+ <a title="Instance Methods" name="instance_methods"></a>
+ <h2 class="subtitle subtitle-methods">Instance Methods</h2>
+
+ <div class="section-method">
+ <a name="//api/name/detectAppDictionariesWithIncremental:withSuccess:withFailure:" title="detectAppDictionariesWithIncremental:withSuccess:withFailure:"></a>
+ <h3 class="subsubtitle method-title">detectAppDictionariesWithIncremental:withSuccess:withFailure:</h3>
+
+
+
+ <div class="method-subsection brief-description">
+ <p>Starts an appDictionary detection process.</p>
+ </div>
+
+
+
+ <div class="method-subsection method-declaration"><code>- (void)detectAppDictionariesWithIncremental:(void ( ^ ) ( NSArray *appDictionaries ))<em>incrementalBlock</em> withSuccess:(void ( ^ ) ( NSArray *appDictionaries ))<em>successBlock</em> withFailure:(void ( ^ ) ( NSError *error ))<em>failureBlock</em></code></div>
+
+
+
+ <div class="method-subsection arguments-section parameters">
+ <h4 class="method-subtitle parameter-title">Parameters</h4>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>incrementalBlock</em></dt>
+ <dd><p>The block invoked after a chunk of appDictionaries are detected.</p></dd>
+ </dl>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>successBlock</em></dt>
+ <dd><p>The block invoked after all possible appDictionaries are detected.</p></dd>
+ </dl>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>failureBlock</em></dt>
+ <dd><p>The block to invoke if the access operation fails—for example, if there is a network error.</p></dd>
+ </dl>
+
+ </div>
+
+
+
+
+
+
+
+ <div class="method-subsection discussion-section">
+ <h4 class="method-subtitle">Discussion</h4>
+ <pre><code>iHasApp *detectionObject = [[iHasApp alloc] init];
+[detectionObject detectAppDictionariesWithIncremental:^(NSArray *appDictionaries) {
+ NSLog(@"Incremental appDictionaries.count: %i", appDictionaries.count);
+} withSuccess:^(NSArray *appDictionaries) {
+ NSLog(@"Successful appDictionaries.count: %i", appDictionaries.count);
+} withFailure:^(NSError *error) {
+ NSLog(@"Failure: %@", error.localizedDescription);
+}];
+</code></pre>
+ </div>
+
+
+
+
+
+ <div class="method-subsection see-also-section">
+ <h4 class="method-subtitle">See Also</h4>
+ <ul>
+
+ <li><code><p><a href="#//api/name/detectAppIdsWithIncremental:withSuccess:withFailure:">&ndash; detectAppIdsWithIncremental:withSuccess:withFailure:</a></p></code></li>
+
+ </ul>
+ </div>
+
+
+
+ <div class="method-subsection declared-in-section">
+ <h4 class="method-subtitle">Declared In</h4>
+ <code class="declared-in-ref">iHasApp.h</code><br />
+ </div>
+
+
+</div>
+
+ <div class="section-method">
+ <a name="//api/name/detectAppIdsWithIncremental:withSuccess:withFailure:" title="detectAppIdsWithIncremental:withSuccess:withFailure:"></a>
+ <h3 class="subsubtitle method-title">detectAppIdsWithIncremental:withSuccess:withFailure:</h3>
+
+
+
+ <div class="method-subsection brief-description">
+ <p>Starts an appId detection process.</p>
+ </div>
+
+
+
+ <div class="method-subsection method-declaration"><code>- (void)detectAppIdsWithIncremental:(void ( ^ ) ( NSArray *appIds ))<em>incrementalBlock</em> withSuccess:(void ( ^ ) ( NSArray *appIds ))<em>successBlock</em> withFailure:(void ( ^ ) ( NSError *error ))<em>failureBlock</em></code></div>
+
+
+
+ <div class="method-subsection arguments-section parameters">
+ <h4 class="method-subtitle parameter-title">Parameters</h4>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>incrementalBlock</em></dt>
+ <dd><p>The block invoked after a chunk of appIds are detected.</p></dd>
+ </dl>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>successBlock</em></dt>
+ <dd><p>The block invoked after all possible appIds are detected.</p></dd>
+ </dl>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>failureBlock</em></dt>
+ <dd><p>The block to invoke if the access operation fails—for example, if there is a network error.</p></dd>
+ </dl>
+
+ </div>
+
+
+
+
+
+
+
+ <div class="method-subsection discussion-section">
+ <h4 class="method-subtitle">Discussion</h4>
+ <pre><code>iHasApp *detectionObject = [[iHasApp alloc] init];
+[detectionObject detectAppIdsWithIncremental:^(NSArray *appIds) {
+ NSLog(@"Incremental appIds.count: %i", appIds.count);
+} withSuccess:^(NSArray *appIds) {
+ NSLog(@"Successful appIds.count: %i", appIds.count);
+} withFailure:^(NSError *error) {
+ NSLog(@"Failure: %@", error.localizedDescription);
+}];
+</code></pre>
+ </div>
+
+
+
+
+
+ <div class="method-subsection see-also-section">
+ <h4 class="method-subtitle">See Also</h4>
+ <ul>
+
+ <li><code><p><a href="#//api/name/detectAppDictionariesWithIncremental:withSuccess:withFailure:">&ndash; detectAppDictionariesWithIncremental:withSuccess:withFailure:</a></p></code></li>
+
+ </ul>
+ </div>
+
+
+
+ <div class="method-subsection declared-in-section">
+ <h4 class="method-subtitle">Declared In</h4>
+ <code class="declared-in-ref">iHasApp.h</code><br />
+ </div>
+
+
+</div>
+
+ <div class="section-method">
+ <a name="//api/name/retrieveAppDictionariesForAppIds:withSuccess:withFailure:" title="retrieveAppDictionariesForAppIds:withSuccess:withFailure:"></a>
+ <h3 class="subsubtitle method-title">retrieveAppDictionariesForAppIds:withSuccess:withFailure:</h3>
+
+
+
+ <div class="method-subsection brief-description">
+ <p>Returns the associated App Store information for the desired apps.</p>
+ </div>
+
+
+
+ <div class="method-subsection method-declaration"><code>- (void)retrieveAppDictionariesForAppIds:(NSArray *)<em>appIds</em> withSuccess:(void ( ^ ) ( NSArray *appDictionaries ))<em>successBlock</em> withFailure:(void ( ^ ) ( NSError *error ))<em>failureBlock</em></code></div>
+
+
+
+ <div class="method-subsection arguments-section parameters">
+ <h4 class="method-subtitle parameter-title">Parameters</h4>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>appIds</em></dt>
+ <dd><p>An array of appIds you want to search for on the iTunes App Store.</p></dd>
+ </dl>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>successBlock</em></dt>
+ <dd><p>The block invoked after the search successfully returns.</p></dd>
+ </dl>
+
+ <dl class="argument-def parameter-def">
+ <dt><em>failureBlock</em></dt>
+ <dd><p>The block to invoke if the search operation fails—for example, if there is a network error.</p></dd>
+ </dl>
+
+ </div>
+
+
+
+
+
+
+
+ <div class="method-subsection discussion-section">
+ <h4 class="method-subtitle">Discussion</h4>
+ <p>This is used internally to convert appIds to appDictionaries.</p>
+
+<p>Data returned is from the iTunes Search API. (e.g: <a href="http://itunes.apple.com/lookup?id=284882215">http://itunes.apple.com/lookup?id=284882215</a> )</p>
+ </div>
+
+
+
+
+
+
+
+ <div class="method-subsection declared-in-section">
+ <h4 class="method-subtitle">Declared In</h4>
+ <code class="declared-in-ref">iHasApp.h</code><br />
+ </div>
+
+
+</div>
+
+ </div>
+
+
+ </div>
+ <div class="main-navigation navigation-bottom">
+ <ul>
+ <li><a href="../index.html">Index</a></li>
+ <li><a href="../hierarchy.html">Hierarchy</a></li>
+</ul>
+ </div>
+ <div id="footer">
+ <hr />
+ <div class="footer-copyright">
+ <p><span class="copyright">&copy; 2012 Objective-See, LLC. All rights reserved. (Last updated: 2012-10-22)</span><br />
+
+ <span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.0.5 (build 789)</a>.</span></p>
+
+ </div>
+ </div>
+ </div>
+ </article>
+ <script type="text/javascript">
+ function jumpToChange()
+ {
+ window.location.hash = this.options[this.selectedIndex].value;
+ }
+
+ function toggleTOC()
+ {
+ var contents = document.getElementById('contents');
+ var tocContainer = document.getElementById('tocContainer');
+
+ if (this.getAttribute('class') == 'open')
+ {
+ this.setAttribute('class', '');
+ contents.setAttribute('class', '');
+ tocContainer.setAttribute('class', '');
+
+ window.name = "hideTOC";
+ }
+ else
+ {
+ this.setAttribute('class', 'open');
+ contents.setAttribute('class', 'isShowingTOC');
+ tocContainer.setAttribute('class', 'isShowingTOC');
+
+ window.name = "";
+ }
+ return false;
+ }
+
+ function toggleTOCEntryChildren(e)
+ {
+ e.stopPropagation();
+ var currentClass = this.getAttribute('class');
+ if (currentClass == 'children') {
+ this.setAttribute('class', 'children open');
+ }
+ else if (currentClass == 'children open') {
+ this.setAttribute('class', 'children');
+ }
+ return false;
+ }
+
+ function tocEntryClick(e)
+ {
+ e.stopPropagation();
+ return true;
+ }
+
+ function init()
+ {
+ var selectElement = document.getElementById('jumpTo');
+ selectElement.addEventListener('change', jumpToChange, false);
+
+ var tocButton = document.getElementById('table_of_contents');
+ tocButton.addEventListener('click', toggleTOC, false);
+
+ var taskTreeItem = document.getElementById('task_treeitem');
+ if (taskTreeItem.getElementsByTagName('li').length > 0)
+ {
+ taskTreeItem.setAttribute('class', 'children');
+ taskTreeItem.firstChild.setAttribute('class', 'disclosure');
+ }
+
+ var tocList = document.getElementById('toc');
+
+ var tocEntries = tocList.getElementsByTagName('li');
+ for (var i = 0; i < tocEntries.length; i++) {
+ tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
+ }
+
+ var tocLinks = tocList.getElementsByTagName('a');
+ for (var i = 0; i < tocLinks.length; i++) {
+ tocLinks[i].addEventListener('click', tocEntryClick, false);
+ }
+
+ if (window.name == "hideTOC") {
+ toggleTOC.call(tocButton);
+ }
+ }
+
+ window.onload = init;
+
+ // If showing in Xcode, hide the TOC and Header
+ if (navigator.userAgent.match(/xcode/i)) {
+ document.getElementById("contents").className = "hideInXcode"
+ document.getElementById("tocContainer").className = "hideInXcode"
+ document.getElementById("top_header").className = "hideInXcode"
+ }
+
+ </script>
+ </body>
+</html>
View
584 com.iHasApp.iHasApp.docset/Contents/Resources/Documents/css/styles.css
@@ -0,0 +1,584 @@
+body {
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ font-size: 13px;
+}
+
+code {
+ font-family: Courier, Consolas, monospace;
+ font-size: 13px;
+ color: #666;
+}
+
+pre {
+ font-family: Courier, Consolas, monospace;
+ font-size: 13px;
+ line-height: 18px;
+ tab-interval: 0.5em;
+ border: 1px solid #C7CFD5;
+ background-color: #F1F5F9;
+ color: #666;
+ padding: 0.3em 1em;
+}
+
+ul {
+ list-style-type: square;
+}
+
+li {
+ margin-bottom: 10px;
+}
+
+a, a code {
+ text-decoration: none;
+ color: #36C;
+}
+
+a:hover, a:hover code {
+ text-decoration: underline;
+ color: #36C;
+}
+
+h2 {
+ border-bottom: 1px solid #8391A8;
+ color: #3C4C6C;
+ font-size: 187%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-bottom: 2px;
+}
+
+table {
+ margin-bottom: 4em;
+ border-collapse:collapse;
+ vertical-align: middle;
+}
+
+td {
+ border: 1px solid #9BB3CD;
+ padding: .667em;
+ font-size: 100%;
+}
+
+th {
+ border: 1px solid #9BB3CD;
+ padding: .3em .667em .3em .667em;
+ background: #93A5BB;
+ font-size: 103%;
+ font-weight: bold;
+ color: white;
+ text-align: left;
+}
+
+/* @group Common page elements */
+
+#top_header {
+ height: 91px;
+ left: 0;
+ min-width: 598px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 900;
+}
+
+#footer {
+ clear: both;
+ padding-top: 20px;
+ text-align: center;
+}
+
+#contents, #overview_contents {
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid #2B334F;
+ position: absolute;
+ top: 91px;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+ padding-left: 2em;
+ padding-right: 2em;
+ padding-top: 1em;
+ min-width: 550px;
+}
+
+#contents.isShowingTOC {
+ left: 230px;
+ min-width: 320px;
+}
+
+.copyright {
+ font-size: 12px;
+}
+
+.generator {
+ font-size: 11px;
+}
+
+.main-navigation ul li {
+ display: inline;
+ margin-left: 15px;
+ list-style: none;
+}
+
+.navigation-top {
+ clear: both;
+ float: right;
+}
+
+.navigation-bottom {
+ clear: both;
+ float: right;
+ margin-top: 20px;
+ margin-bottom: -10px;
+}
+
+.open > .disclosure {
+ background-image: url("../img/disclosure_open.png");
+}
+
+.disclosure {
+ background: url("../img/disclosure.png") no-repeat scroll 0 0;
+}
+
+.disclosure, .nodisclosure {
+ display: inline-block;
+ height: 8px;
+ margin-right: 5px;
+ position: relative;
+ width: 9px;
+}
+
+/* @end */
+
+/* @group Header */
+
+#top_header #library {
+ background: url("../img/library_background.png") repeat-x 0 0 #485E78;
+ background-color: #ccc;
+ height: 35px;
+ font-size: 115%;
+}
+
+#top_header #library #libraryTitle {
+ color: #FFFFFF;
+ margin-left: 15px;
+ text-shadow: 0 -1px 0 #485E78;
+ top: 8px;
+ position: absolute;
+}
+
+#top_header #library #developerHome {
+ color: #92979E;
+ right: 15px;
+ top: 8px;
+ position: absolute;
+}
+
+#top_header #library a:hover {
+ text-decoration: none;
+}
+
+#top_header #title {
+ background: url("../img/title_background.png") repeat-x 0 0 #8A98A9;
+ border-bottom: 1px solid #B6B6B6;
+ height: 25px;
+ overflow: hidden;
+}
+
+#top_header h1 {
+ font-size: 115%;
+ font-weight: normal;
+ margin: 0;
+ padding: 3px 0 2px;
+ text-align: center;
+ text-shadow: 0 1px 0 #D5D5D5;
+ white-space: nowrap;
+}
+
+#headerButtons {
+ background-color: #D8D8D8;
+ background-image: url("../img/button_bar_background.png");
+ border-bottom: 1px solid #EDEDED;
+ border-top: 1px solid #2B334F;
+ font-size: 8pt;
+ height: 28px;
+ left: 0;
+ list-style: none outside none;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ right: 0;
+ top: 61px;
+}
+
+#headerButtons li {
+ background-repeat: no-repeat;
+ display: inline;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding: 0;
+}
+
+#toc_button button {
+ border-color: #ACACAC;
+ border-style: none solid none none;
+ border-width: 0 1px 0 0;
+ height: 28px;
+ margin: 0;
+ padding-left: 30px;
+ text-align: left;
+ width: 230px;
+}
+
+li#jumpto_button {
+ left: 230px;
+ margin-left: 0;
+ position: absolute;
+}
+
+li#jumpto_button select {
+ height: 22px;
+ margin: 5px 2px 0 10px;
+ max-width: 300px;
+}
+
+/* @end */
+
+/* @group Table of contents */
+
+#tocContainer.isShowingTOC {
+ border-right: 1px solid #ACACAC;
+ display: block;
+ overflow-x: hidden;
+ overflow-y: auto;
+ padding: 0;
+}
+
+#tocContainer {
+ background-color: #E4EBF7;
+ border-top: 1px solid #2B334F;
+ bottom: 0;
+ display: none;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ top: 91px;
+ width: 229px;
+}
+
+#tocContainer > ul#toc {
+ font-size: 11px;
+ margin: 0;
+ padding: 12px 0 18px;
+ width: 209px;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+#tocContainer > ul#toc > li {
+ margin: 0;
+ padding: 0 0 7px 30px;
+ text-indent: -15px;
+}
+
+#tocContainer > ul#toc > li > .sectionName a {
+ color: #000000;
+ font-weight: bold;
+}
+
+#tocContainer > ul#toc > li > .sectionName a:hover {
+ text-decoration: none;
+}
+
+#tocContainer > ul#toc li.children > ul {
+ display: none;
+ height: 0;
+}
+
+#tocContainer > ul#toc > li > ul {
+ margin: 0;
+ padding: 0;
+}
+
+#tocContainer > ul#toc > li > ul, ul#toc > li > ul > li {
+ margin-left: 0;
+ margin-bottom: 0;
+ padding-left: 15px;
+}
+
+#tocContainer > ul#toc > li ul {
+ list-style: none;
+ margin-right: 0;
+ padding-right: 0;
+}
+
+#tocContainer > ul#toc li.children.open > ul {
+ display: block;
+ height: auto;
+ margin-left: -15px;
+ padding-left: 0;
+}
+
+#tocContainer > ul#toc > li > ul, ul#toc > li > ul > li {
+ margin-left: 0;
+ padding-left: 15px;
+}
+
+#tocContainer li ul li {
+ margin-top: 0.583em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+#tocContainer li ul li span.sectionName {
+ white-space: normal;
+}
+
+#tocContainer > ul#toc > li > ul > li > .sectionName a {
+ font-weight: bold;
+}
+
+#tocContainer > ul#toc > li > ul a {
+ color: #4F4F4F;
+}
+
+/* @end */
+
+/* @group Index formatting */
+
+.index-title {
+ font-size: 13px;
+ font-weight: normal;
+}
+
+.index-column {
+ float: left;
+ width: 30%;
+ min-width: 200px;
+ font-size: 11px;
+}
+
+.index-column ul {
+ margin: 8px 0 0 0;
+ padding: 0;
+ list-style: none;
+}
+
+.index-column ul li {
+ margin: 0 0 3px 0;
+ padding: 0;
+}
+
+.hierarchy-column {
+ min-width: 400px;
+}
+
+.hierarchy-column ul {
+ margin: 3px 0 0 15px;
+}
+
+.hierarchy-column ul li {
+ list-style-type: square;
+}
+
+/* @end */
+
+/* @group Common formatting elements */
+
+.title {
+ font-weight: normal;
+ font-size: 215%;
+ margin-top:0;
+}
+
+.subtitle {
+ font-weight: normal;
+ font-size: 180%;
+ color: #3C4C6C;
+ border-bottom: 1px solid #5088C5;
+}
+
+.subsubtitle {
+ font-weight: normal;
+ font-size: 145%;
+ height: 0.7em;
+}
+
+.note {
+ border: 1px solid #5088C5;
+ background-color: white;
+ margin: 1.667em 0 1.75em 0;
+ padding: 0 .667em .083em .750em;
+}
+
+.warning {
+ border: 1px solid #5088C5;
+ background-color: #F0F3F7;
+ margin-bottom: 0.5em;
+ padding: 0.3em 0.8em;
+}
+
+.bug {
+ border: 1px solid #000;
+ background-color: #ffffcc;
+ margin-bottom: 0.5em;
+ padding: 0.3em 0.8em;
+}
+
+.deprecated {
+ color: #F60425;
+}
+
+/* @end */
+
+/* @group Common layout */
+
+.section {
+ margin-top: 3em;
+}
+
+/* @end */
+
+/* @group Object specification section */
+
+.section-specification {
+ margin-left: 2.5em;
+ margin-right: 2.5em;
+ font-size: 12px;
+}
+
+.section-specification table {
+ margin-bottom: 0em;
+ border-top: 1px solid #d6e0e5;
+}
+
+.section-specification td {
+ vertical-align: top;
+ border-bottom: 1px solid #d6e0e5;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-top-width: 0px;
+ padding: .6em;
+}
+
+.section-specification .specification-title {
+ font-weight: bold;
+}
+
+/* @end */
+
+/* @group Tasks section */
+
+.task-list {
+ list-style-type: none;
+ padding-left: 0px;
+}
+
+.task-list li {
+ margin-bottom: 3px;
+}
+
+.task-item-suffix {
+ color: #996;
+ font-size: 12px;
+ font-style: italic;
+ margin-left: 0.5em;
+}
+
+span.tooltip span.tooltip {
+ font-size: 1.0em;
+ display: none;
+ padding: 0.3em;
+ border: 1px solid #aaa;
+ background-color: #fdfec8;
+ color: #000;
+ text-align: left;
+}
+
+span.tooltip:hover span.tooltip {
+ display: block;
+ position: absolute;
+ margin-left: 2em;
+}
+
+/* @end */
+
+/* @group Method section */
+
+.section-method {
+ margin-top: 2.3em;
+}
+
+.method-title {
+ margin-bottom: 1.5em;
+}
+
+.method-subtitle {
+ margin-top: 0.7em;
+ margin-bottom: 0.2em;
+}
+
+.method-subsection p {
+ margin-top: 0.4em;
+ margin-bottom: 0.8em;
+}
+
+.method-declaration {
+ margin-top:1.182em;
+ margin-bottom:.909em;
+}
+
+.method-declaration code {
+ font:14px Courier, Consolas, monospace;
+ color:#000;
+}
+
+.declaration {
+ color: #000;
+}
+
+.argument-def {
+ margin-top: 0.3em;
+ margin-bottom: 0.3em;
+}
+
+.argument-def dd {
+ margin-left: 1.25em;
+}
+
+.see-also-section ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin-top: 0;
+}
+
+.see-also-section li {
+ margin-bottom: 3px;
+}
+
+.declared-in-ref {
+ color: #666;
+}
+
+#tocContainer.hideInXcode {
+ display: none;
+ border: 0px solid black;
+}
+
+#top_header.hideInXcode {