Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Updated iVersion to 1.6.4

  • Loading branch information...
commit 96db24d6281c57ee9d67db548c7dbe17745b0902 1 parent 81ddfc4
Nick Lockwood authored
Showing with 142 additions and 129 deletions.
  1. 0  {Mac Demo → Examples/Advanced Demo}/English.lproj/InfoPlist.strings
  2. 0  { → Examples}/Advanced Demo/English.lproj/MainMenu.xib
  3. 0  { → Examples}/Advanced Demo/iVersionAdvanced-Info.plist
  4. +15 −15 { → Examples}/Advanced Demo/iVersionAdvanced.xcodeproj/project.pbxproj
  5. 0  { → Examples}/Advanced Demo/iVersionAdvanced_Prefix.pch
  6. 0  { → Examples}/Advanced Demo/iVersionMacAppDelegate.h
  7. 0  { → Examples}/Advanced Demo/iVersionMacAppDelegate.m
  8. 0  {Mac Demo → Examples/Advanced Demo}/main.m
  9. 0  {iPhone Demo → Examples/Advanced Demo}/versions.plist
  10. 0  {Advanced Demo → Examples/Mac Demo}/English.lproj/InfoPlist.strings
  11. 0  { → Examples}/Mac Demo/English.lproj/MainMenu.xib
  12. 0  { → Examples}/Mac Demo/iVersionMac-Info.plist
  13. +15 −15 { → Examples}/Mac Demo/iVersionMac.xcodeproj/project.pbxproj
  14. 0  { → Examples}/Mac Demo/iVersionMacAppDelegate.h
  15. 0  { → Examples}/Mac Demo/iVersionMacAppDelegate.m
  16. 0  { → Examples}/Mac Demo/iVersionMac_Prefix.pch
  17. 0  {Advanced Demo → Examples/Mac Demo}/main.m
  18. 0  { → Examples}/Mac Demo/versions.plist
  19. 0  { → Examples}/iPhone Demo/Classes/iVersionAppDelegate.h
  20. 0  { → Examples}/iPhone Demo/Classes/iVersionAppDelegate.m
  21. 0  { → Examples}/iPhone Demo/Classes/iVersionViewController.h
  22. 0  { → Examples}/iPhone Demo/Classes/iVersionViewController.m
  23. 0  { → Examples}/iPhone Demo/MainWindow.xib
  24. 0  { → Examples}/iPhone Demo/iVersion-Info.plist
  25. +15 −15 { → Examples}/iPhone Demo/iVersion.xcodeproj/project.pbxproj
  26. 0  { → Examples}/iPhone Demo/iVersionViewController.xib
  27. 0  { → Examples}/iPhone Demo/iVersion_Prefix.pch
  28. 0  { → Examples}/iPhone Demo/main.m
  29. 0  {Advanced Demo → Examples/iPhone Demo}/versions.plist
  30. +1 −1  LICENCE.md
  31. +30 −18 README.md
  32. +8 −0 RELEASE NOTES.md
  33. +33 −25 Web Service/iversion.php
  34. +1 −1  iVersion/iVersion.h
  35. +24 −39 iVersion/iVersion.m
View
0  Mac Demo/English.lproj/InfoPlist.strings → ...nced Demo/English.lproj/InfoPlist.strings
File renamed without changes
View
0  Advanced Demo/English.lproj/MainMenu.xib → .../Advanced Demo/English.lproj/MainMenu.xib
File renamed without changes
View
0  Advanced Demo/iVersionAdvanced-Info.plist → ...Advanced Demo/iVersionAdvanced-Info.plist
File renamed without changes
View
30 ...VersionAdvanced.xcodeproj/project.pbxproj → ...VersionAdvanced.xcodeproj/project.pbxproj
@@ -8,18 +8,16 @@
/* Begin PBXBuildFile section */
01D0D13312FF415100F15064 /* versions.plist in Resources */ = {isa = PBXBuildFile; fileRef = 01D0D13212FF415100F15064 /* versions.plist */; };
- 01D0D13912FF41C000F15064 /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 01D0D13812FF41C000F15064 /* iVersion.m */; };
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
256AC3DA0F4B6AC300CF3369 /* iVersionMacAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* iVersionMacAppDelegate.m */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+ B205F2101462A79C00B69B0D /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B205F20F1462A79C00B69B0D /* iVersion.m */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
01D0D13212FF415100F15064 /* versions.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = versions.plist; sourceTree = "<group>"; };
- 01D0D13712FF41C000F15064 /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = "<group>"; };
- 01D0D13812FF41C000F15064 /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = "<group>"; };
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
@@ -32,6 +30,8 @@
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
8D1107310486CEB800E47090 /* iVersionAdvanced-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "iVersionAdvanced-Info.plist"; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* iVersionAdvanced.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iVersionAdvanced.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ B205F20E1462A79C00B69B0D /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = "<group>"; };
+ B205F20F1462A79C00B69B0D /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -46,16 +46,6 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 01D0D13612FF41C000F15064 /* iVersion */ = {
- isa = PBXGroup;
- children = (
- 01D0D13712FF41C000F15064 /* iVersion.h */,
- 01D0D13812FF41C000F15064 /* iVersion.m */,
- );
- name = iVersion;
- path = ../iVersion;
- sourceTree = SOURCE_ROOT;
- };
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
@@ -94,7 +84,7 @@
29B97314FDCFA39411CA2CEA /* iVersionMac */ = {
isa = PBXGroup;
children = (
- 01D0D13612FF41C000F15064 /* iVersion */,
+ B205F20D1462A79C00B69B0D /* iVersion */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
@@ -133,6 +123,16 @@
name = Frameworks;
sourceTree = "<group>";
};
+ B205F20D1462A79C00B69B0D /* iVersion */ = {
+ isa = PBXGroup;
+ children = (
+ B205F20E1462A79C00B69B0D /* iVersion.h */,
+ B205F20F1462A79C00B69B0D /* iVersion.m */,
+ );
+ name = iVersion;
+ path = ../../iVersion;
+ sourceTree = "<group>";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -201,7 +201,7 @@
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
256AC3DA0F4B6AC300CF3369 /* iVersionMacAppDelegate.m in Sources */,
- 01D0D13912FF41C000F15064 /* iVersion.m in Sources */,
+ B205F2101462A79C00B69B0D /* iVersion.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
View
0  Advanced Demo/iVersionAdvanced_Prefix.pch → ...Advanced Demo/iVersionAdvanced_Prefix.pch
File renamed without changes
View
0  Advanced Demo/iVersionMacAppDelegate.h → ...es/Advanced Demo/iVersionMacAppDelegate.h
File renamed without changes
View
0  Advanced Demo/iVersionMacAppDelegate.m → ...es/Advanced Demo/iVersionMacAppDelegate.m
File renamed without changes
View
0  Mac Demo/main.m → Examples/Advanced Demo/main.m
File renamed without changes
View
0  iPhone Demo/versions.plist → Examples/Advanced Demo/versions.plist
File renamed without changes
View
0  ...nced Demo/English.lproj/InfoPlist.strings → .../Mac Demo/English.lproj/InfoPlist.strings
File renamed without changes
View
0  Mac Demo/English.lproj/MainMenu.xib → Examples/Mac Demo/English.lproj/MainMenu.xib
File renamed without changes
View
0  Mac Demo/iVersionMac-Info.plist → Examples/Mac Demo/iVersionMac-Info.plist
File renamed without changes
View
30 ...emo/iVersionMac.xcodeproj/project.pbxproj → ...emo/iVersionMac.xcodeproj/project.pbxproj
@@ -8,18 +8,16 @@
/* Begin PBXBuildFile section */
01D0D13312FF415100F15064 /* versions.plist in Resources */ = {isa = PBXBuildFile; fileRef = 01D0D13212FF415100F15064 /* versions.plist */; };
- 01D0D13912FF41C000F15064 /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 01D0D13812FF41C000F15064 /* iVersion.m */; };
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
256AC3DA0F4B6AC300CF3369 /* iVersionMacAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* iVersionMacAppDelegate.m */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+ B205F2071462A73500B69B0D /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B205F2061462A73500B69B0D /* iVersion.m */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
01D0D13212FF415100F15064 /* versions.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = versions.plist; sourceTree = "<group>"; };
- 01D0D13712FF41C000F15064 /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = "<group>"; };
- 01D0D13812FF41C000F15064 /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = "<group>"; };
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
@@ -32,6 +30,8 @@
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
8D1107310486CEB800E47090 /* iVersionMac-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "iVersionMac-Info.plist"; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* iVersionMac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iVersionMac.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ B205F2051462A73500B69B0D /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = "<group>"; };
+ B205F2061462A73500B69B0D /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -46,16 +46,6 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 01D0D13612FF41C000F15064 /* iVersion */ = {
- isa = PBXGroup;
- children = (
- 01D0D13712FF41C000F15064 /* iVersion.h */,
- 01D0D13812FF41C000F15064 /* iVersion.m */,
- );
- name = iVersion;
- path = ../iVersion;
- sourceTree = SOURCE_ROOT;
- };
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
@@ -94,7 +84,7 @@
29B97314FDCFA39411CA2CEA /* iVersionMac */ = {
isa = PBXGroup;
children = (
- 01D0D13612FF41C000F15064 /* iVersion */,
+ B205F2041462A73500B69B0D /* iVersion */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
@@ -133,6 +123,16 @@
name = Frameworks;
sourceTree = "<group>";
};
+ B205F2041462A73500B69B0D /* iVersion */ = {
+ isa = PBXGroup;
+ children = (
+ B205F2051462A73500B69B0D /* iVersion.h */,
+ B205F2061462A73500B69B0D /* iVersion.m */,
+ );
+ name = iVersion;
+ path = ../../iVersion;
+ sourceTree = "<group>";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -201,7 +201,7 @@
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
256AC3DA0F4B6AC300CF3369 /* iVersionMacAppDelegate.m in Sources */,
- 01D0D13912FF41C000F15064 /* iVersion.m in Sources */,
+ B205F2071462A73500B69B0D /* iVersion.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
View
0  Mac Demo/iVersionMacAppDelegate.h → Examples/Mac Demo/iVersionMacAppDelegate.h
File renamed without changes
View
0  Mac Demo/iVersionMacAppDelegate.m → Examples/Mac Demo/iVersionMacAppDelegate.m
File renamed without changes
View
0  Mac Demo/iVersionMac_Prefix.pch → Examples/Mac Demo/iVersionMac_Prefix.pch
File renamed without changes
View
0  Advanced Demo/main.m → Examples/Mac Demo/main.m
File renamed without changes
View
0  Mac Demo/versions.plist → Examples/Mac Demo/versions.plist
File renamed without changes
View
0  iPhone Demo/Classes/iVersionAppDelegate.h → ...iPhone Demo/Classes/iVersionAppDelegate.h
File renamed without changes
View
0  iPhone Demo/Classes/iVersionAppDelegate.m → ...iPhone Demo/Classes/iVersionAppDelegate.m
File renamed without changes
View
0  iPhone Demo/Classes/iVersionViewController.h → ...one Demo/Classes/iVersionViewController.h
File renamed without changes
View
0  iPhone Demo/Classes/iVersionViewController.m → ...one Demo/Classes/iVersionViewController.m
File renamed without changes
View
0  iPhone Demo/MainWindow.xib → Examples/iPhone Demo/MainWindow.xib
File renamed without changes
View
0  iPhone Demo/iVersion-Info.plist → Examples/iPhone Demo/iVersion-Info.plist
File renamed without changes
View
30 ...e Demo/iVersion.xcodeproj/project.pbxproj → ...e Demo/iVersion.xcodeproj/project.pbxproj
@@ -7,7 +7,6 @@
objects = {
/* Begin PBXBuildFile section */
- 01D0D11412FF402800F15064 /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 01D0D11312FF402800F15064 /* iVersion.m */; };
1D3623260D0F684500981E51 /* iVersionAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* iVersionAppDelegate.m */; };
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
@@ -16,12 +15,11 @@
2899E5220DE3E06400AC0155 /* iVersionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* iVersionViewController.xib */; };
28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; };
28D7ACF80DDB3853001CB0EB /* iVersionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* iVersionViewController.m */; };
+ B205F1FE1462A6BF00B69B0D /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B205F1FD1462A6BF00B69B0D /* iVersion.m */; };
B22F022812F02A1E00C7AA1E /* versions.plist in Resources */ = {isa = PBXBuildFile; fileRef = B22F022712F02A1E00C7AA1E /* versions.plist */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
- 01D0D11212FF402800F15064 /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = "<group>"; };
- 01D0D11312FF402800F15064 /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = "<group>"; };
1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
1D3623240D0F684500981E51 /* iVersionAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionAppDelegate.h; sourceTree = "<group>"; };
1D3623250D0F684500981E51 /* iVersionAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersionAppDelegate.m; sourceTree = "<group>"; };
@@ -35,6 +33,8 @@
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
32CA4F630368D1EE00C91783 /* iVersion_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion_Prefix.pch; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* iVersion-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "iVersion-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
+ B205F1FC1462A6BF00B69B0D /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = "<group>"; };
+ B205F1FD1462A6BF00B69B0D /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = "<group>"; };
B22F022712F02A1E00C7AA1E /* versions.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = versions.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -52,16 +52,6 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 01D0D11112FF402800F15064 /* iVersion */ = {
- isa = PBXGroup;
- children = (
- 01D0D11212FF402800F15064 /* iVersion.h */,
- 01D0D11312FF402800F15064 /* iVersion.m */,
- );
- name = iVersion;
- path = ../iVersion;
- sourceTree = SOURCE_ROOT;
- };
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
@@ -84,7 +74,7 @@
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
isa = PBXGroup;
children = (
- 01D0D11112FF402800F15064 /* iVersion */,
+ B205F1FB1462A6BF00B69B0D /* iVersion */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
@@ -124,6 +114,16 @@
name = Frameworks;
sourceTree = "<group>";
};
+ B205F1FB1462A6BF00B69B0D /* iVersion */ = {
+ isa = PBXGroup;
+ children = (
+ B205F1FC1462A6BF00B69B0D /* iVersion.h */,
+ B205F1FD1462A6BF00B69B0D /* iVersion.m */,
+ );
+ name = iVersion;
+ path = ../../iVersion;
+ sourceTree = "<group>";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -192,7 +192,7 @@
1D60589B0D05DD56006BFB54 /* main.m in Sources */,
1D3623260D0F684500981E51 /* iVersionAppDelegate.m in Sources */,
28D7ACF80DDB3853001CB0EB /* iVersionViewController.m in Sources */,
- 01D0D11412FF402800F15064 /* iVersion.m in Sources */,
+ B205F1FE1462A6BF00B69B0D /* iVersion.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
View
0  iPhone Demo/iVersionViewController.xib → ...es/iPhone Demo/iVersionViewController.xib
File renamed without changes
View
0  iPhone Demo/iVersion_Prefix.pch → Examples/iPhone Demo/iVersion_Prefix.pch
File renamed without changes
View
0  iPhone Demo/main.m → Examples/iPhone Demo/main.m
File renamed without changes
View
0  Advanced Demo/versions.plist → Examples/iPhone Demo/versions.plist
File renamed without changes
View
2  LICENCE.md
@@ -1,5 +1,5 @@
iVersion
-version 1.6.3, October 18th, 2011
+version 1.6.4, November 3rd, 2011
Copyright (C) 2011 Charcoal Design
View
48 README.md
@@ -11,7 +11,17 @@ iVersion has an additional function, which is to tell users about important new
NOTE: iVersion cannot tell if a given release is available to download, so make sure that you only update the remote versions file after apple has approved your app and it has appeared in the store.
-One way to do this automatically is to replace the remote versions file with a web service that dynamically polls the iTunes app page for your app and scrapes the version number and release notes. A sample implementation of such a service (written in PHP) is included as an example, however it is not clear whether doing this is in compliance with Apple's guidelines. See the Web Service heading below for more information.
+One way to do this automatically is to replace the hard-coded remote versions file with a web service that dynamically polls the iTunes App Store services for your app details and extracts the version number and release notes. A sample implementation of such a service (written in PHP) is included as an example.
+
+
+Supported iOS & SDK Versions
+-----------------------------
+
+* Supported build target - iOS 5.0 (Xcode 4.2)
+* Earliest supported deployment target - iOS 4.0 (Xcode 4.2)
+* Earliest compatible deployment target - iOS 3.0
+
+NOTE: 'Supported' means that the library has been tested with this version. 'Compatible' means that the library should work on this iOS version (i.e. it doesn't rely on any unavailable SDK features) but is no longer being tested for compatibility and may require tweaking or bug fixes to run correctly.
Installation
@@ -254,33 +264,35 @@ Although iVersion isn't localised, it is easy to localise without making any mod
Web Service
---------------
-Included with the source is a sample web service for automatically detecting app updates. The service is written in PHP, but is simple enough that it can be easily ported to other web scripting language.
-
----
-
-WARNING: Apple's developer licence agreement states:
+Included with the source is a sample web service for automatically detecting app updates. The service is written in PHP, but is simple enough that it can be easily ported to other web scripting languages. The new version of this service makes use of Apple's authorised search APIs.
-"Neither You nor Your Application may perform any functions or link to any content, services, information or data or use any robot, spider, site search or other retrieval application or device to scrape, mine, retrieve, cache, analyze or index software, data or services provided by Apple or its licensors, or obtain (or try to obtain) any such data, except the data that Apple expressly provides or makes available to You in connection with such services. You agree that You will not collect, disseminate or use any such data for any unauthorized purpose."
+The service uses the following configuration constants:
-It is not clear whether use of a scraping script such as the one included with this project is in violation of terms, but linking to such a service from an App Store app is at your own discretion and is neither recommended nor endorsed by the developer.
+ $platform
+
+Apple's search APIs are platform specific (iPhone, iPad and Mac). Use one of the IPHONE, IPAD and MAC constants provided for this value.
----
+ $app_store_id
+
+The app store ID of your application.
-The service uses two configuration constants:
+ $developer
+
+Your iTunes developer name as it appears on iTunes. This is used as a filter to reduce the amount of JSON the service has to sift through to find your app (unfortunately there currently appears to be no way to search for a specific app by ID).
- $app_store_id
+ $country
-The app store ID of the application.
+The two-letter country code for the iTunes store you wish to get the application details from. There is no way to determine which app store a given user is using programmatically, so you'll either have to use the locale and hope that it's right, or hard-code for the US store and assume that your app will appear on all stores at roughly the same time.
- $store_locale
+ $language
-The two-letter locale code for the iTunes store you wish to poll.
+The language you want to return your release notes in. This is independent of the store country, so it's a good idea to base this on the user's locale by detecting this in the app and passing it through as a parameter in the service URL.
-These constants could be set by URL parameter, but it may be unwise for you to host a general-purpose iVersion service URL in case other developers hot-link to it and use it for their own purposes.
+In principle these constants could all set by URL query parameter, but it may be unwise for you to host a general-purpose iVersion service URL in case other developers hot-link to it and use it for their own purposes (sucking up your bandwidth in the process). In general you should probably pass the language and country codes in dynamically and hard code the app details into the service.
-The service is currently very simplistic. Notably it only works on some iTunes store locales because it relies on matching specific text strings. It should be easy to add support for other locales if you are reasonably familiar with regular expressions. Otherwise it's recommended that you hard code for the US store.
+The sample service also includes an optional caching feature. Since every iVersion request from every one of your apps will go via your web service, it may result in a lot of iTunes hits from your server. For a popular app this could be hundreds or thousands of hits per day. Apple might treat this suspicious and start rejecting hits from your server's IP address. By using the cache feature you can rate-limit this as well as improving performance and reducing your server's downstream bandwidth usage.
-The service is quite fragile in that it will cease to work if Apple makes significant structural or copy changes to the iTunes page. It will fail gracefully in this instance however - if the page layout changes then the service will return a valid plist file that simply contains no versions in the dictionary. If something more serious goes wrong, the iVersion library will silently ignore malformed version plists anyway, so it's pretty unlikely that using this service will break your app.
+The service should fail gracefully if it has trouble connecting to iTunes. If anything goes wrong with retrieving or parsing the iTunes JSON it should return a valid plist file that simply contains no versions in the dictionary. If something more serious goes wrong, the iVersion library will silently ignore malformed version plists anyway, so it's pretty unlikely that using this service will break your app.
You may also find that the use of file_get_contents() for accessing a remote URL is not supported on your server. If that is the case, check out the PHP manual page for file_get_contents for suggestions on alternative implementations:
@@ -298,7 +310,7 @@ This time it will not say that a new version is available. In effect you have si
If you dismiss the dialog and then quit and relaunch the app you should now see nothing. This is because the app has detected that the bundle version hasn't changed since you last launched the app.
-To show the alerts again, delete the app from the simulator and reset the bundle version to 1.1. Alternatively, enabled the debug settings to force the alerts to appear on launch.
+To show the alerts again, delete the app from the simulator and reset the bundle version to 1.1. Alternatively, enable the debug settings to force the alerts to appear on launch.
Advanced Example
View
8 RELEASE NOTES.md
@@ -1,3 +1,11 @@
+Version 1.6.4
+
+- Updated iVersion web service to use official iTunes App Store search APIs
+- iVersion now uses CFBundleDisplayName for the application name (if available)
+- Increased Mac app store refresh delay for older Macs
+- Simplified version comparison logic
+- Reorganised examples
+
Version 1.6.3
- Fixed web service and updated project for Xcode 4.2
View
58 Web Service/iversion.php
@@ -2,21 +2,29 @@
/*
-WARNING: Apple's developer licence agreement states:
-
-"Neither You nor Your Application may perform any functions or link to any content, services, information or data or use any robot, spider, site search or other retrieval application or device to scrape, mine, retrieve, cache, analyze or index software, data or services provided by Apple or its licensors, or obtain (or try to obtain) any such data, except the data that Apple expressly provides or makes available to You in connection with such services. You agree that You will not collect, disseminate or use any such data for any unauthorized purpose."
-
-It is not clear whether use of a scraping script such as this one is in violation of these terms, but linking to such a service from an App Store app is at your own discretion and is neither recommended nor endorsed by the developer.
+NOTE: this web service has been updated to make use of the official App Store search API, and as such is no longer in danger of violating Apple's terms and conditions.
*/
-//app-specific config
+//choice of 3 platforms to search
+define ('IPHONE', 'software');
+define ('IPAD', 'iPadSoftware');
+define ('MAC', 'macSoftware');
+
+//app config - best to hard code this to avoid abuse
+$platform = IPAD;
$app_store_id = 355313284;
-$store_locale = 'us';
+$developer = 'Charcoal Design';
+
+//country and language config - you may wish to pass these in
+//as query string arguments from the url, that way your app
+//can request the right version based on the user's locale settings
+$country = 'US';
+$language = 'en_US';
//cache config
$cache_enabled = false;
-$cache_file_path = '../cache/iversion_'.$app_store_id.'_'.$store_locale.'.plist';
+$cache_file_path = '../cache/iversion_'.$app_store_id.'_'.$country.'_'.$language.'.plist';
$cache_duration = 3600; //seconds
//set mime type - strictly this should be application/x-plist
@@ -31,27 +39,27 @@
return;
}
-//get itunes app page content
-$html = file_get_contents("http://itunes.apple.com/$store_locale/app/id$app_store_id?mt=8");
-
-//strip newlines (makes regex matching simpler)
-$html = preg_replace('/[\n\r]+/', ' ', $html);
+//get itunes json app data
+//note that file get contents may not work with remote files on some servers,
+//so you may need to replace this call with an alternative api, e.g. curl
+$json = file_get_contents('http://itunes.apple.com/search?limit=200&media=software&term='.urlencode($developer).'&country='.urlencode($country).'&lang='.urlencode($language).'&attribute=softwareDeveloper&entity=software');
-//get version number
-if (preg_match('/Version:\s*<\/span>\s*([0-9.]+)/i', $html, $matches))
+//find correct app in results
+$data = @json_decode($json);
+foreach (@$data->results as $result)
{
- $version = @$matches[1];
+ if (@$result->trackId == $app_store_id)
+ {
+ $data = $result;
+ break;
+ }
}
-//get release notes:
-if (preg_match("/New In Version $version\s*<\/h4>\s*<p[^>]*>(.+?)<\/p>/i", $html,$matches))
-{
- $release_notes = @$matches[1];
-
- //replace line breaks and strip other html tags or entities
- $release_notes = preg_replace('/<br[^>]*>/', "\n", $release_notes);
- $release_notes = strip_tags($release_notes);
-}
+//get version number
+$version = @$data->version;
+
+//get release notes
+$release_notes = @$data->releaseNotes;
//start output buffering to capture output
ob_start();
View
2  iVersion/iVersion.h
@@ -1,7 +1,7 @@
//
// iVersion.h
//
-// Version 1.6.3
+// Version 1.6.4
//
// Created by Nick Lockwood on 26/01/2011.
// Copyright 2011 Charcoal Design. All rights reserved.
View
63 iVersion/iVersion.m
@@ -1,7 +1,7 @@
//
// iVersion.m
//
-// Version 1.6.3
+// Version 1.6.4
//
// Created by Nick Lockwood on 26/01/2011.
// Copyright 2011 Charcoal Design. All rights reserved.
@@ -48,53 +48,33 @@
#define SECONDS_IN_A_DAY 86400.0
-#define MAC_APP_STORE_REFRESH_DELAY 2
+#define MAC_APP_STORE_REFRESH_DELAY 5.0
@implementation NSString(iVersion)
- (NSComparisonResult)compareVersion:(NSString *)version
{
- NSArray *thisVersionParts = [self componentsSeparatedByString:@"."];
- NSArray *versionParts = [version componentsSeparatedByString:@"."];
- NSUInteger count = MIN([thisVersionParts count], [versionParts count]);
- NSUInteger i;
- for (i = 0; i < count; i++)
- {
- NSUInteger thisPart = [[thisVersionParts objectAtIndex:i] integerValue];
- NSUInteger part = [[versionParts objectAtIndex:i] integerValue];
- if (thisPart > part)
- {
- return NSOrderedDescending; //version is older
- }
- else if (thisPart < part)
- {
- return NSOrderedAscending; //version is newer
- }
- }
- if ([thisVersionParts count] > [versionParts count])
- {
- return NSOrderedDescending; //version is older
- }
- else if ([thisVersionParts count] < [versionParts count])
- {
- return NSOrderedAscending; //version is newer
- }
- return NSOrderedSame; //version is the same
+ return [self compare:version options:NSNumericSearch];
}
- (NSComparisonResult)compareVersionDescending:(NSString *)version
{
- NSComparisonResult result = [self compareVersion:version];
- if (result == NSOrderedDescending)
- {
- return NSOrderedAscending;
- }
- else if (result == NSOrderedAscending)
+ switch ([self compareVersion:version])
{
- return NSOrderedDescending;
+ case NSOrderedAscending:
+ {
+ return NSOrderedDescending;
+ }
+ case NSOrderedDescending:
+ {
+ return NSOrderedAscending;
+ }
+ default:
+ {
+ return NSOrderedSame;
+ }
}
- return NSOrderedSame;
}
@end
@@ -181,9 +161,14 @@ - (iVersion *)init
name:NSApplicationDidFinishLaunchingNotification
object:nil];
#endif
- //application name and version
- self.applicationName = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleNameKey];
+ //localised application name and version
self.applicationVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
+ self.applicationName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
+ if ([applicationName length] == 0)
+ {
+ self.applicationName = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleNameKey];
+ }
+
//default settings
showOnFirstLaunch = NO;
@@ -663,7 +648,7 @@ - (void)openAppPageWhenAppStoreLaunched
}
//try again
- [self performSelector:@selector(openAppPageWhenAppStoreLaunched) withObject:nil afterDelay:0];
+ [self performSelector:@selector(openAppPageWhenAppStoreLaunched) withObject:nil afterDelay:0.0];
}
- (void)openAppPageInAppStore
Please sign in to comment.
Something went wrong with that request. Please try again.