├── .gitignore ├── Examples ├── Advanced Demo │ ├── English.lproj │ │ ├── InfoPlist.strings │ │ └── MainMenu.xib │ ├── iVersionAdvanced-Info.plist │ ├── iVersionAdvanced.xcodeproj │ │ └── project.pbxproj │ ├── iVersionAdvanced_Prefix.pch │ ├── iVersionMacAppDelegate.h │ ├── iVersionMacAppDelegate.m │ ├── main.m │ └── versions.plist ├── Mac Demo │ ├── English.lproj │ │ ├── InfoPlist.strings │ │ └── MainMenu.xib │ ├── iVersionMac-Info.plist │ ├── iVersionMac.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── iVersionMac.xcscheme │ ├── iVersionMacAppDelegate.h │ ├── iVersionMacAppDelegate.m │ ├── iVersionMac_Prefix.pch │ ├── main.m │ └── versions.plist ├── Zero Config Demo │ ├── Classes │ │ ├── iVersionAppDelegate.h │ │ ├── iVersionAppDelegate.m │ │ ├── iVersionViewController.h │ │ └── iVersionViewController.m │ ├── Default-568h@2x.png │ ├── MainWindow.xib │ ├── ZeroConfig-Info.plist │ ├── ZeroConfig.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── ZeroConfig.xcscheme │ ├── ZeroConfig_Prefix.pch │ ├── iVersionViewController.xib │ └── main.m └── iPhone Demo │ ├── Classes │ ├── iVersionAppDelegate.h │ ├── iVersionAppDelegate.m │ ├── iVersionViewController.h │ └── iVersionViewController.m │ ├── Default-568h@2x.png │ ├── MainWindow.xib │ ├── iVersion-Info.plist │ ├── iVersion.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── iVersion.xcscheme │ ├── iVersionViewController.xib │ ├── iVersion_Prefix.pch │ ├── main.m │ └── versions.plist ├── LICENCE.md ├── README.md ├── iVersion.podspec.json └── iVersion ├── iVersion.bundle ├── cs.lproj │ └── Localizable.strings ├── da.lproj │ └── Localizable.strings ├── de.lproj │ └── Localizable.strings ├── el.lproj │ └── Localizable.strings ├── en-GB.lproj │ └── Localizable.strings ├── en.lproj │ └── Localizable.strings ├── es.lproj │ └── Localizable.strings ├── fr.lproj │ └── Localizable.strings ├── it.lproj │ └── Localizable.strings ├── ja.lproj │ └── Localizable.strings ├── pt-PT.lproj │ └── Localizable.strings ├── pt.lproj │ └── Localizable.strings ├── ru.lproj │ └── Localizable.strings ├── tr.lproj │ └── Localizable.strings ├── zh-Hans.lproj │ └── Localizable.strings ├── zh-Hant.lproj │ └── Localizable.strings └── zh-TW.lproj │ └── Localizable.strings ├── iVersion.h └── iVersion.m /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | *.xccheckout 3 | *.xcuserstate 4 | 5 | build/ 6 | Build/ 7 | DerivedData 8 | xcuserdata 9 | 10 | Examples/iPhone Demo/iVersion.xcodeproj/project.xcworkspace/contents.xcworkspacedata 11 | 12 | -------------------------------------------------------------------------------- /Examples/Advanced Demo/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Examples/Advanced Demo/iVersionAdvanced-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSMinimumSystemVersion 26 | ${MACOSX_DEPLOYMENT_TARGET} 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | NSAppTransportSecurity 32 | 33 | NSExceptionDomains 34 | 35 | charcoaldesign.co.uk 36 | 37 | NSExceptionAllowsInsecureHTTPLoads 38 | 39 | NSIncludesSubdomains 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Examples/Advanced Demo/iVersionAdvanced.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 01D0D13312FF415100F15064 /* versions.plist in Resources */ = {isa = PBXBuildFile; fileRef = 01D0D13212FF415100F15064 /* versions.plist */; }; 11 | 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 12 | 256AC3DA0F4B6AC300CF3369 /* iVersionMacAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* iVersionMacAppDelegate.m */; }; 13 | 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 14 | 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 15 | 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 16 | B205F2101462A79C00B69B0D /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B205F20F1462A79C00B69B0D /* iVersion.m */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 01D0D13212FF415100F15064 /* versions.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = versions.plist; sourceTree = ""; }; 21 | 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 22 | 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 23 | 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 24 | 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; 25 | 256AC3D80F4B6AC300CF3369 /* iVersionMacAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionMacAppDelegate.h; sourceTree = ""; }; 26 | 256AC3D90F4B6AC300CF3369 /* iVersionMacAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersionMacAppDelegate.m; sourceTree = ""; }; 27 | 256AC3F00F4B6AF500CF3369 /* iVersionAdvanced_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionAdvanced_Prefix.pch; sourceTree = ""; }; 28 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29 | 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 30 | 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 31 | 8D1107310486CEB800E47090 /* iVersionAdvanced-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "iVersionAdvanced-Info.plist"; sourceTree = ""; }; 32 | 8D1107320486CEB800E47090 /* iVersionAdvanced.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iVersionAdvanced.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | B205F20E1462A79C00B69B0D /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = ""; }; 34 | B205F20F1462A79C00B69B0D /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = ""; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | 8D11072E0486CEB800E47090 /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 43 | ); 44 | runOnlyForDeploymentPostprocessing = 0; 45 | }; 46 | /* End PBXFrameworksBuildPhase section */ 47 | 48 | /* Begin PBXGroup section */ 49 | 080E96DDFE201D6D7F000001 /* Classes */ = { 50 | isa = PBXGroup; 51 | children = ( 52 | 256AC3D80F4B6AC300CF3369 /* iVersionMacAppDelegate.h */, 53 | 256AC3D90F4B6AC300CF3369 /* iVersionMacAppDelegate.m */, 54 | ); 55 | name = Classes; 56 | sourceTree = ""; 57 | }; 58 | 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 62 | ); 63 | name = "Linked Frameworks"; 64 | sourceTree = ""; 65 | }; 66 | 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { 67 | isa = PBXGroup; 68 | children = ( 69 | 29B97324FDCFA39411CA2CEA /* AppKit.framework */, 70 | 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, 71 | 29B97325FDCFA39411CA2CEA /* Foundation.framework */, 72 | ); 73 | name = "Other Frameworks"; 74 | sourceTree = ""; 75 | }; 76 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 8D1107320486CEB800E47090 /* iVersionAdvanced.app */, 80 | ); 81 | name = Products; 82 | sourceTree = ""; 83 | }; 84 | 29B97314FDCFA39411CA2CEA /* iVersionMac */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | B205F20D1462A79C00B69B0D /* iVersion */, 88 | 080E96DDFE201D6D7F000001 /* Classes */, 89 | 29B97315FDCFA39411CA2CEA /* Other Sources */, 90 | 29B97317FDCFA39411CA2CEA /* Resources */, 91 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 92 | 19C28FACFE9D520D11CA2CBB /* Products */, 93 | ); 94 | name = iVersionMac; 95 | sourceTree = ""; 96 | }; 97 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | 256AC3F00F4B6AF500CF3369 /* iVersionAdvanced_Prefix.pch */, 101 | 29B97316FDCFA39411CA2CEA /* main.m */, 102 | ); 103 | name = "Other Sources"; 104 | sourceTree = ""; 105 | }; 106 | 29B97317FDCFA39411CA2CEA /* Resources */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 8D1107310486CEB800E47090 /* iVersionAdvanced-Info.plist */, 110 | 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, 111 | 1DDD58140DA1D0A300B32029 /* MainMenu.xib */, 112 | 01D0D13212FF415100F15064 /* versions.plist */, 113 | ); 114 | name = Resources; 115 | sourceTree = ""; 116 | }; 117 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 121 | 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, 122 | ); 123 | name = Frameworks; 124 | sourceTree = ""; 125 | }; 126 | B205F20D1462A79C00B69B0D /* iVersion */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | B205F20E1462A79C00B69B0D /* iVersion.h */, 130 | B205F20F1462A79C00B69B0D /* iVersion.m */, 131 | ); 132 | name = iVersion; 133 | path = ../../iVersion; 134 | sourceTree = ""; 135 | }; 136 | /* End PBXGroup section */ 137 | 138 | /* Begin PBXNativeTarget section */ 139 | 8D1107260486CEB800E47090 /* iVersionAdvanced */ = { 140 | isa = PBXNativeTarget; 141 | buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "iVersionAdvanced" */; 142 | buildPhases = ( 143 | 8D1107290486CEB800E47090 /* Resources */, 144 | 8D11072C0486CEB800E47090 /* Sources */, 145 | 8D11072E0486CEB800E47090 /* Frameworks */, 146 | ); 147 | buildRules = ( 148 | ); 149 | dependencies = ( 150 | ); 151 | name = iVersionAdvanced; 152 | productInstallPath = "$(HOME)/Applications"; 153 | productName = iVersionMac; 154 | productReference = 8D1107320486CEB800E47090 /* iVersionAdvanced.app */; 155 | productType = "com.apple.product-type.application"; 156 | }; 157 | /* End PBXNativeTarget section */ 158 | 159 | /* Begin PBXProject section */ 160 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 161 | isa = PBXProject; 162 | attributes = { 163 | LastUpgradeCheck = 0810; 164 | }; 165 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iVersionAdvanced" */; 166 | compatibilityVersion = "Xcode 3.2"; 167 | developmentRegion = English; 168 | hasScannedForEncodings = 1; 169 | knownRegions = ( 170 | English, 171 | Japanese, 172 | French, 173 | German, 174 | ); 175 | mainGroup = 29B97314FDCFA39411CA2CEA /* iVersionMac */; 176 | projectDirPath = ""; 177 | projectRoot = ""; 178 | targets = ( 179 | 8D1107260486CEB800E47090 /* iVersionAdvanced */, 180 | ); 181 | }; 182 | /* End PBXProject section */ 183 | 184 | /* Begin PBXResourcesBuildPhase section */ 185 | 8D1107290486CEB800E47090 /* Resources */ = { 186 | isa = PBXResourcesBuildPhase; 187 | buildActionMask = 2147483647; 188 | files = ( 189 | 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, 190 | 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */, 191 | 01D0D13312FF415100F15064 /* versions.plist in Resources */, 192 | ); 193 | runOnlyForDeploymentPostprocessing = 0; 194 | }; 195 | /* End PBXResourcesBuildPhase section */ 196 | 197 | /* Begin PBXSourcesBuildPhase section */ 198 | 8D11072C0486CEB800E47090 /* Sources */ = { 199 | isa = PBXSourcesBuildPhase; 200 | buildActionMask = 2147483647; 201 | files = ( 202 | 8D11072D0486CEB800E47090 /* main.m in Sources */, 203 | 256AC3DA0F4B6AC300CF3369 /* iVersionMacAppDelegate.m in Sources */, 204 | B205F2101462A79C00B69B0D /* iVersion.m in Sources */, 205 | ); 206 | runOnlyForDeploymentPostprocessing = 0; 207 | }; 208 | /* End PBXSourcesBuildPhase section */ 209 | 210 | /* Begin PBXVariantGroup section */ 211 | 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { 212 | isa = PBXVariantGroup; 213 | children = ( 214 | 089C165DFE840E0CC02AAC07 /* English */, 215 | ); 216 | name = InfoPlist.strings; 217 | sourceTree = ""; 218 | }; 219 | 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = { 220 | isa = PBXVariantGroup; 221 | children = ( 222 | 1DDD58150DA1D0A300B32029 /* English */, 223 | ); 224 | name = MainMenu.xib; 225 | sourceTree = ""; 226 | }; 227 | /* End PBXVariantGroup section */ 228 | 229 | /* Begin XCBuildConfiguration section */ 230 | C01FCF4B08A954540054247B /* Debug */ = { 231 | isa = XCBuildConfiguration; 232 | buildSettings = { 233 | ALWAYS_SEARCH_USER_PATHS = NO; 234 | CLANG_ENABLE_OBJC_ARC = YES; 235 | COMBINE_HIDPI_IMAGES = YES; 236 | COPY_PHASE_STRIP = NO; 237 | GCC_DYNAMIC_NO_PIC = NO; 238 | GCC_MODEL_TUNING = G5; 239 | GCC_OPTIMIZATION_LEVEL = 0; 240 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 241 | GCC_PREFIX_HEADER = iVersionAdvanced_Prefix.pch; 242 | INFOPLIST_FILE = "iVersionAdvanced-Info.plist"; 243 | INSTALL_PATH = "$(HOME)/Applications"; 244 | PRODUCT_BUNDLE_IDENTIFIER = "com.charcoaldesign.${PRODUCT_NAME:rfc1034identifier}"; 245 | PRODUCT_NAME = iVersionAdvanced; 246 | }; 247 | name = Debug; 248 | }; 249 | C01FCF4C08A954540054247B /* Release */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | ALWAYS_SEARCH_USER_PATHS = NO; 253 | CLANG_ENABLE_OBJC_ARC = YES; 254 | COMBINE_HIDPI_IMAGES = YES; 255 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 256 | GCC_MODEL_TUNING = G5; 257 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 258 | GCC_PREFIX_HEADER = iVersionAdvanced_Prefix.pch; 259 | INFOPLIST_FILE = "iVersionAdvanced-Info.plist"; 260 | INSTALL_PATH = "$(HOME)/Applications"; 261 | PRODUCT_BUNDLE_IDENTIFIER = "com.charcoaldesign.${PRODUCT_NAME:rfc1034identifier}"; 262 | PRODUCT_NAME = iVersionAdvanced; 263 | }; 264 | name = Release; 265 | }; 266 | C01FCF4F08A954540054247B /* Debug */ = { 267 | isa = XCBuildConfiguration; 268 | buildSettings = { 269 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 270 | CLANG_WARN_BOOL_CONVERSION = YES; 271 | CLANG_WARN_CONSTANT_CONVERSION = YES; 272 | CLANG_WARN_EMPTY_BODY = YES; 273 | CLANG_WARN_ENUM_CONVERSION = YES; 274 | CLANG_WARN_INFINITE_RECURSION = YES; 275 | CLANG_WARN_INT_CONVERSION = YES; 276 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 277 | CLANG_WARN_UNREACHABLE_CODE = YES; 278 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 279 | ENABLE_STRICT_OBJC_MSGSEND = YES; 280 | ENABLE_TESTABILITY = YES; 281 | GCC_C_LANGUAGE_STANDARD = gnu99; 282 | GCC_NO_COMMON_BLOCKS = YES; 283 | GCC_OPTIMIZATION_LEVEL = 0; 284 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 285 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 286 | GCC_WARN_UNDECLARED_SELECTOR = YES; 287 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 288 | GCC_WARN_UNUSED_FUNCTION = YES; 289 | GCC_WARN_UNUSED_VARIABLE = YES; 290 | MACOSX_DEPLOYMENT_TARGET = 10.11; 291 | ONLY_ACTIVE_ARCH = YES; 292 | SDKROOT = macosx; 293 | }; 294 | name = Debug; 295 | }; 296 | C01FCF5008A954540054247B /* Release */ = { 297 | isa = XCBuildConfiguration; 298 | buildSettings = { 299 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 300 | CLANG_WARN_BOOL_CONVERSION = YES; 301 | CLANG_WARN_CONSTANT_CONVERSION = YES; 302 | CLANG_WARN_EMPTY_BODY = YES; 303 | CLANG_WARN_ENUM_CONVERSION = YES; 304 | CLANG_WARN_INFINITE_RECURSION = YES; 305 | CLANG_WARN_INT_CONVERSION = YES; 306 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 307 | CLANG_WARN_UNREACHABLE_CODE = YES; 308 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 309 | ENABLE_STRICT_OBJC_MSGSEND = YES; 310 | GCC_C_LANGUAGE_STANDARD = gnu99; 311 | GCC_NO_COMMON_BLOCKS = YES; 312 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 313 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 314 | GCC_WARN_UNDECLARED_SELECTOR = YES; 315 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 316 | GCC_WARN_UNUSED_FUNCTION = YES; 317 | GCC_WARN_UNUSED_VARIABLE = YES; 318 | MACOSX_DEPLOYMENT_TARGET = 10.11; 319 | SDKROOT = macosx; 320 | }; 321 | name = Release; 322 | }; 323 | /* End XCBuildConfiguration section */ 324 | 325 | /* Begin XCConfigurationList section */ 326 | C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "iVersionAdvanced" */ = { 327 | isa = XCConfigurationList; 328 | buildConfigurations = ( 329 | C01FCF4B08A954540054247B /* Debug */, 330 | C01FCF4C08A954540054247B /* Release */, 331 | ); 332 | defaultConfigurationIsVisible = 0; 333 | defaultConfigurationName = Release; 334 | }; 335 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iVersionAdvanced" */ = { 336 | isa = XCConfigurationList; 337 | buildConfigurations = ( 338 | C01FCF4F08A954540054247B /* Debug */, 339 | C01FCF5008A954540054247B /* Release */, 340 | ); 341 | defaultConfigurationIsVisible = 0; 342 | defaultConfigurationName = Release; 343 | }; 344 | /* End XCConfigurationList section */ 345 | }; 346 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 347 | } 348 | -------------------------------------------------------------------------------- /Examples/Advanced Demo/iVersionAdvanced_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'iVersionMac' target in the 'iVersionMac' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /Examples/Advanced Demo/iVersionMacAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionMacAppDelegate.h 3 | // iVersionMac 4 | // 5 | // Created by Nick Lockwood on 06/02/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "iVersion.h" 11 | 12 | 13 | @interface iVersionMacAppDelegate : NSObject 14 | 15 | @property (weak) IBOutlet NSWindow *window; 16 | @property (weak) IBOutlet NSProgressIndicator *progressIndicator; 17 | @property (unsafe_unretained) IBOutlet NSTextView *textView; 18 | 19 | - (IBAction)checkForNewVersion:(id)sender; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Examples/Advanced Demo/iVersionMacAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionMacAppDelegate.m 3 | // iVersionMac 4 | // 5 | // Created by Nick Lockwood on 06/02/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import "iVersionMacAppDelegate.h" 10 | 11 | 12 | @implementation iVersionMacAppDelegate 13 | 14 | @synthesize window; 15 | @synthesize progressIndicator; 16 | @synthesize textView; 17 | 18 | + (void)initialize 19 | { 20 | //set remote plist. This is optional - if you don't set this 21 | //iVersion will just get the release notes from iTunes directly (if your app is on the store) 22 | [iVersion sharedInstance].remoteVersionsPlistURL = @"http://charcoaldesign.co.uk/iVersion/versions.plist"; 23 | 24 | //disable automatic checks 25 | [iVersion sharedInstance].checkAtLaunch = NO; 26 | } 27 | 28 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 29 | { 30 | //set myself as iVersion delegate 31 | //you don't actually need to set this if you 32 | //are using the AppDelegate as your iVersion delegate 33 | //as that is the default iVersion delegate anyway 34 | [iVersion sharedInstance].delegate = self; 35 | } 36 | 37 | - (IBAction)checkForNewVersion:(id)sender; 38 | { 39 | //perform manual check 40 | [[iVersion sharedInstance] checkForNewVersion]; 41 | [progressIndicator startAnimation:self]; 42 | } 43 | 44 | #pragma mark - 45 | #pragma mark iVersionDelegate methods 46 | 47 | - (void)iVersionVersionCheckDidFailWithError:(NSError *)error 48 | { 49 | [textView setString:[NSString stringWithFormat:@"Error: %@", error]]; 50 | [progressIndicator stopAnimation:self]; 51 | } 52 | 53 | - (void)iVersionDidNotDetectNewVersion 54 | { 55 | [textView setString:@"No new version detected"]; 56 | [progressIndicator stopAnimation:self]; 57 | } 58 | 59 | - (void)iVersionDidDetectNewVersion:(NSString *)version details:(NSString *)versionDetails 60 | { 61 | [textView setString:versionDetails]; 62 | [progressIndicator stopAnimation:self]; 63 | } 64 | 65 | - (BOOL)iVersionShouldDisplayNewVersion:(NSString *)version details:(NSString *)versionDetails 66 | { 67 | //don't show alert 68 | return NO; 69 | } 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /Examples/Advanced Demo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // iVersionMac 4 | // 5 | // Created by Nick Lockwood on 06/02/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) 12 | { 13 | return NSApplicationMain(argc, (const char **) argv); 14 | } 15 | -------------------------------------------------------------------------------- /Examples/Advanced Demo/versions.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1.0 6 | 7 | First release 8 | 9 | 1.1 10 | 11 | NEW: Added new snoodlebar feature 12 | FIX: Fixed the bugalloo glitch 13 | 14 | 1.2 15 | 16 | NEW: Some important feature 17 | FIX: Some important bug fix 18 | CHANGE: Some significant change 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Examples/Mac Demo/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Examples/Mac Demo/iVersionMac-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.1 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.1 25 | LSMinimumSystemVersion 26 | ${MACOSX_DEPLOYMENT_TARGET} 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /Examples/Mac Demo/iVersionMac.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 01D0D13312FF415100F15064 /* versions.plist in Resources */ = {isa = PBXBuildFile; fileRef = 01D0D13212FF415100F15064 /* versions.plist */; }; 11 | 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 12 | 256AC3DA0F4B6AC300CF3369 /* iVersionMacAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* iVersionMacAppDelegate.m */; }; 13 | 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 14 | 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 15 | 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 16 | B205F2071462A73500B69B0D /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B205F2061462A73500B69B0D /* iVersion.m */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 01D0D13212FF415100F15064 /* versions.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = versions.plist; sourceTree = ""; }; 21 | 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 22 | 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 23 | 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 24 | 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; 25 | 256AC3D80F4B6AC300CF3369 /* iVersionMacAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionMacAppDelegate.h; sourceTree = ""; }; 26 | 256AC3D90F4B6AC300CF3369 /* iVersionMacAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersionMacAppDelegate.m; sourceTree = ""; }; 27 | 256AC3F00F4B6AF500CF3369 /* iVersionMac_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionMac_Prefix.pch; sourceTree = ""; }; 28 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29 | 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 30 | 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 31 | 8D1107310486CEB800E47090 /* iVersionMac-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "iVersionMac-Info.plist"; sourceTree = ""; }; 32 | 8D1107320486CEB800E47090 /* iVersionMac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iVersionMac.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | B205F2051462A73500B69B0D /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = ""; }; 34 | B205F2061462A73500B69B0D /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = ""; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | 8D11072E0486CEB800E47090 /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 43 | ); 44 | runOnlyForDeploymentPostprocessing = 0; 45 | }; 46 | /* End PBXFrameworksBuildPhase section */ 47 | 48 | /* Begin PBXGroup section */ 49 | 080E96DDFE201D6D7F000001 /* Classes */ = { 50 | isa = PBXGroup; 51 | children = ( 52 | 256AC3D80F4B6AC300CF3369 /* iVersionMacAppDelegate.h */, 53 | 256AC3D90F4B6AC300CF3369 /* iVersionMacAppDelegate.m */, 54 | ); 55 | name = Classes; 56 | sourceTree = ""; 57 | }; 58 | 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 62 | ); 63 | name = "Linked Frameworks"; 64 | sourceTree = ""; 65 | }; 66 | 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { 67 | isa = PBXGroup; 68 | children = ( 69 | 29B97324FDCFA39411CA2CEA /* AppKit.framework */, 70 | 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, 71 | 29B97325FDCFA39411CA2CEA /* Foundation.framework */, 72 | ); 73 | name = "Other Frameworks"; 74 | sourceTree = ""; 75 | }; 76 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 8D1107320486CEB800E47090 /* iVersionMac.app */, 80 | ); 81 | name = Products; 82 | sourceTree = ""; 83 | }; 84 | 29B97314FDCFA39411CA2CEA /* iVersionMac */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | B205F2041462A73500B69B0D /* iVersion */, 88 | 080E96DDFE201D6D7F000001 /* Classes */, 89 | 29B97315FDCFA39411CA2CEA /* Other Sources */, 90 | 29B97317FDCFA39411CA2CEA /* Resources */, 91 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 92 | 19C28FACFE9D520D11CA2CBB /* Products */, 93 | ); 94 | name = iVersionMac; 95 | sourceTree = ""; 96 | }; 97 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | 256AC3F00F4B6AF500CF3369 /* iVersionMac_Prefix.pch */, 101 | 29B97316FDCFA39411CA2CEA /* main.m */, 102 | ); 103 | name = "Other Sources"; 104 | sourceTree = ""; 105 | }; 106 | 29B97317FDCFA39411CA2CEA /* Resources */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 8D1107310486CEB800E47090 /* iVersionMac-Info.plist */, 110 | 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, 111 | 1DDD58140DA1D0A300B32029 /* MainMenu.xib */, 112 | 01D0D13212FF415100F15064 /* versions.plist */, 113 | ); 114 | name = Resources; 115 | sourceTree = ""; 116 | }; 117 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 121 | 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, 122 | ); 123 | name = Frameworks; 124 | sourceTree = ""; 125 | }; 126 | B205F2041462A73500B69B0D /* iVersion */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | B205F2051462A73500B69B0D /* iVersion.h */, 130 | B205F2061462A73500B69B0D /* iVersion.m */, 131 | ); 132 | name = iVersion; 133 | path = ../../iVersion; 134 | sourceTree = ""; 135 | }; 136 | /* End PBXGroup section */ 137 | 138 | /* Begin PBXNativeTarget section */ 139 | 8D1107260486CEB800E47090 /* iVersionMac */ = { 140 | isa = PBXNativeTarget; 141 | buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "iVersionMac" */; 142 | buildPhases = ( 143 | 8D1107290486CEB800E47090 /* Resources */, 144 | 8D11072C0486CEB800E47090 /* Sources */, 145 | 8D11072E0486CEB800E47090 /* Frameworks */, 146 | ); 147 | buildRules = ( 148 | ); 149 | dependencies = ( 150 | ); 151 | name = iVersionMac; 152 | productInstallPath = "$(HOME)/Applications"; 153 | productName = iVersionMac; 154 | productReference = 8D1107320486CEB800E47090 /* iVersionMac.app */; 155 | productType = "com.apple.product-type.application"; 156 | }; 157 | /* End PBXNativeTarget section */ 158 | 159 | /* Begin PBXProject section */ 160 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 161 | isa = PBXProject; 162 | attributes = { 163 | LastUpgradeCheck = 0810; 164 | }; 165 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iVersionMac" */; 166 | compatibilityVersion = "Xcode 3.2"; 167 | developmentRegion = English; 168 | hasScannedForEncodings = 1; 169 | knownRegions = ( 170 | English, 171 | Japanese, 172 | French, 173 | German, 174 | ); 175 | mainGroup = 29B97314FDCFA39411CA2CEA /* iVersionMac */; 176 | projectDirPath = ""; 177 | projectRoot = ""; 178 | targets = ( 179 | 8D1107260486CEB800E47090 /* iVersionMac */, 180 | ); 181 | }; 182 | /* End PBXProject section */ 183 | 184 | /* Begin PBXResourcesBuildPhase section */ 185 | 8D1107290486CEB800E47090 /* Resources */ = { 186 | isa = PBXResourcesBuildPhase; 187 | buildActionMask = 2147483647; 188 | files = ( 189 | 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, 190 | 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */, 191 | 01D0D13312FF415100F15064 /* versions.plist in Resources */, 192 | ); 193 | runOnlyForDeploymentPostprocessing = 0; 194 | }; 195 | /* End PBXResourcesBuildPhase section */ 196 | 197 | /* Begin PBXSourcesBuildPhase section */ 198 | 8D11072C0486CEB800E47090 /* Sources */ = { 199 | isa = PBXSourcesBuildPhase; 200 | buildActionMask = 2147483647; 201 | files = ( 202 | 8D11072D0486CEB800E47090 /* main.m in Sources */, 203 | 256AC3DA0F4B6AC300CF3369 /* iVersionMacAppDelegate.m in Sources */, 204 | B205F2071462A73500B69B0D /* iVersion.m in Sources */, 205 | ); 206 | runOnlyForDeploymentPostprocessing = 0; 207 | }; 208 | /* End PBXSourcesBuildPhase section */ 209 | 210 | /* Begin PBXVariantGroup section */ 211 | 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { 212 | isa = PBXVariantGroup; 213 | children = ( 214 | 089C165DFE840E0CC02AAC07 /* English */, 215 | ); 216 | name = InfoPlist.strings; 217 | sourceTree = ""; 218 | }; 219 | 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = { 220 | isa = PBXVariantGroup; 221 | children = ( 222 | 1DDD58150DA1D0A300B32029 /* English */, 223 | ); 224 | name = MainMenu.xib; 225 | sourceTree = ""; 226 | }; 227 | /* End PBXVariantGroup section */ 228 | 229 | /* Begin XCBuildConfiguration section */ 230 | C01FCF4B08A954540054247B /* Debug */ = { 231 | isa = XCBuildConfiguration; 232 | buildSettings = { 233 | ALWAYS_SEARCH_USER_PATHS = NO; 234 | CLANG_ENABLE_OBJC_ARC = YES; 235 | COMBINE_HIDPI_IMAGES = YES; 236 | COPY_PHASE_STRIP = NO; 237 | GCC_DYNAMIC_NO_PIC = NO; 238 | GCC_MODEL_TUNING = G5; 239 | GCC_OPTIMIZATION_LEVEL = 0; 240 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 241 | GCC_PREFIX_HEADER = iVersionMac_Prefix.pch; 242 | INFOPLIST_FILE = "iVersionMac-Info.plist"; 243 | INSTALL_PATH = "$(HOME)/Applications"; 244 | PRODUCT_BUNDLE_IDENTIFIER = "com.charcoaldesign.${PRODUCT_NAME:rfc1034identifier}"; 245 | PRODUCT_NAME = iVersionMac; 246 | WARNING_CFLAGS = ( 247 | "-Weverything", 248 | "-Wno-objc-missing-property-synthesis", 249 | "-Wno-unused-macros", 250 | "-Wno-direct-ivar-access", 251 | "-Wno-pedantic", 252 | ); 253 | }; 254 | name = Debug; 255 | }; 256 | C01FCF4C08A954540054247B /* Release */ = { 257 | isa = XCBuildConfiguration; 258 | buildSettings = { 259 | ALWAYS_SEARCH_USER_PATHS = NO; 260 | CLANG_ENABLE_OBJC_ARC = YES; 261 | COMBINE_HIDPI_IMAGES = YES; 262 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 263 | GCC_MODEL_TUNING = G5; 264 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 265 | GCC_PREFIX_HEADER = iVersionMac_Prefix.pch; 266 | INFOPLIST_FILE = "iVersionMac-Info.plist"; 267 | INSTALL_PATH = "$(HOME)/Applications"; 268 | PRODUCT_BUNDLE_IDENTIFIER = "com.charcoaldesign.${PRODUCT_NAME:rfc1034identifier}"; 269 | PRODUCT_NAME = iVersionMac; 270 | WARNING_CFLAGS = ( 271 | "-Weverything", 272 | "-Wno-objc-missing-property-synthesis", 273 | "-Wno-unused-macros", 274 | "-Wno-direct-ivar-access", 275 | "-Wno-pedantic", 276 | ); 277 | }; 278 | name = Release; 279 | }; 280 | C01FCF4F08A954540054247B /* Debug */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 284 | CLANG_WARN_BOOL_CONVERSION = YES; 285 | CLANG_WARN_CONSTANT_CONVERSION = YES; 286 | CLANG_WARN_EMPTY_BODY = YES; 287 | CLANG_WARN_ENUM_CONVERSION = YES; 288 | CLANG_WARN_INFINITE_RECURSION = YES; 289 | CLANG_WARN_INT_CONVERSION = YES; 290 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 291 | CLANG_WARN_UNREACHABLE_CODE = YES; 292 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 293 | ENABLE_STRICT_OBJC_MSGSEND = YES; 294 | ENABLE_TESTABILITY = YES; 295 | GCC_C_LANGUAGE_STANDARD = gnu99; 296 | GCC_NO_COMMON_BLOCKS = YES; 297 | GCC_OPTIMIZATION_LEVEL = 0; 298 | GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; 299 | GCC_TREAT_WARNINGS_AS_ERRORS = YES; 300 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 301 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 302 | GCC_WARN_UNDECLARED_SELECTOR = YES; 303 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 304 | GCC_WARN_UNUSED_FUNCTION = YES; 305 | GCC_WARN_UNUSED_VARIABLE = YES; 306 | MACOSX_DEPLOYMENT_TARGET = 10.8; 307 | ONLY_ACTIVE_ARCH = YES; 308 | RUN_CLANG_STATIC_ANALYZER = YES; 309 | SDKROOT = macosx; 310 | VALID_ARCHS = x86_64; 311 | WARNING_CFLAGS = ( 312 | "-Wall", 313 | "-Wextra", 314 | ); 315 | }; 316 | name = Debug; 317 | }; 318 | C01FCF5008A954540054247B /* Release */ = { 319 | isa = XCBuildConfiguration; 320 | buildSettings = { 321 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 322 | CLANG_WARN_BOOL_CONVERSION = YES; 323 | CLANG_WARN_CONSTANT_CONVERSION = YES; 324 | CLANG_WARN_EMPTY_BODY = YES; 325 | CLANG_WARN_ENUM_CONVERSION = YES; 326 | CLANG_WARN_INFINITE_RECURSION = YES; 327 | CLANG_WARN_INT_CONVERSION = YES; 328 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 329 | CLANG_WARN_UNREACHABLE_CODE = YES; 330 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 331 | ENABLE_STRICT_OBJC_MSGSEND = YES; 332 | GCC_C_LANGUAGE_STANDARD = gnu99; 333 | GCC_NO_COMMON_BLOCKS = YES; 334 | GCC_TREAT_WARNINGS_AS_ERRORS = YES; 335 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 336 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 337 | GCC_WARN_UNDECLARED_SELECTOR = YES; 338 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 339 | GCC_WARN_UNUSED_FUNCTION = YES; 340 | GCC_WARN_UNUSED_VARIABLE = YES; 341 | MACOSX_DEPLOYMENT_TARGET = 10.8; 342 | RUN_CLANG_STATIC_ANALYZER = YES; 343 | SDKROOT = macosx; 344 | VALID_ARCHS = x86_64; 345 | WARNING_CFLAGS = ( 346 | "-Wall", 347 | "-Wextra", 348 | ); 349 | }; 350 | name = Release; 351 | }; 352 | /* End XCBuildConfiguration section */ 353 | 354 | /* Begin XCConfigurationList section */ 355 | C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "iVersionMac" */ = { 356 | isa = XCConfigurationList; 357 | buildConfigurations = ( 358 | C01FCF4B08A954540054247B /* Debug */, 359 | C01FCF4C08A954540054247B /* Release */, 360 | ); 361 | defaultConfigurationIsVisible = 0; 362 | defaultConfigurationName = Release; 363 | }; 364 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iVersionMac" */ = { 365 | isa = XCConfigurationList; 366 | buildConfigurations = ( 367 | C01FCF4F08A954540054247B /* Debug */, 368 | C01FCF5008A954540054247B /* Release */, 369 | ); 370 | defaultConfigurationIsVisible = 0; 371 | defaultConfigurationName = Release; 372 | }; 373 | /* End XCConfigurationList section */ 374 | }; 375 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 376 | } 377 | -------------------------------------------------------------------------------- /Examples/Mac Demo/iVersionMac.xcodeproj/xcshareddata/xcschemes/iVersionMac.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Examples/Mac Demo/iVersionMacAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionMacAppDelegate.h 3 | // iVersionMac 4 | // 5 | // Created by Nick Lockwood on 06/02/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface iVersionMacAppDelegate : NSObject 12 | 13 | @property (weak) IBOutlet NSWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Examples/Mac Demo/iVersionMacAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionMacAppDelegate.m 3 | // iVersionMac 4 | // 5 | // Created by Nick Lockwood on 06/02/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import "iVersionMacAppDelegate.h" 10 | #import "iVersion.h" 11 | 12 | 13 | @implementation iVersionMacAppDelegate 14 | 15 | @synthesize window; 16 | 17 | + (void)initialize 18 | { 19 | //set the bundle ID. normally you wouldn't need to do this 20 | //as it is picked up automatically from your Info.plist file 21 | //but we want to test with an app that's actually on the store 22 | [iVersion sharedInstance].applicationBundleID = @"com.charcoaldesign.RainbowBlocksLite"; 23 | 24 | //configure iVersion. These paths are optional - if you don't set 25 | //them, iVersion will just get the release notes from iTunes directly (if your app is on the store) 26 | [iVersion sharedInstance].remoteVersionsPlistURL = @"http://charcoaldesign.co.uk/iVersion/versions.plist"; 27 | [iVersion sharedInstance].localVersionsPlistPath = @"versions.plist"; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Examples/Mac Demo/iVersionMac_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'iVersionMac' target in the 'iVersionMac' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /Examples/Mac Demo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // iVersionMac 4 | // 5 | // Created by Nick Lockwood on 06/02/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char *argv[]) 12 | { 13 | return NSApplicationMain(argc, argv); 14 | } 15 | -------------------------------------------------------------------------------- /Examples/Mac Demo/versions.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1.0 6 | 7 | First release 8 | 9 | 1.1 10 | 11 | NEW: Added new snoodlebar feature 12 | FIX: Fixed the bugalloo glitch 13 | 14 | 1.2 15 | 16 | NEW: Some important feature 17 | FIX: Some important bug fix 18 | CHANGE: Some significant change 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/Classes/iVersionAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionAppDelegate.h 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class iVersionViewController; 12 | 13 | @interface iVersionAppDelegate : NSObject 14 | 15 | @property (nonatomic, strong) IBOutlet UIWindow *window; 16 | @property (nonatomic, strong) IBOutlet iVersionViewController *viewController; 17 | 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/Classes/iVersionAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionAppDelegate.m 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import "iVersionAppDelegate.h" 10 | #import "iVersionViewController.h" 11 | 12 | 13 | @implementation iVersionAppDelegate 14 | 15 | 16 | //absolutely no configuration whatsoever! 17 | //the app release notes are retrieved directly 18 | //from iTunes using the app's bundle ID 19 | 20 | 21 | #pragma mark - 22 | #pragma mark Application lifecycle 23 | 24 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 25 | { 26 | _window.rootViewController = _viewController; 27 | [_window makeKeyAndVisible]; 28 | return YES; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/Classes/iVersionViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionViewController.h 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface iVersionViewController : UIViewController 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/Classes/iVersionViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionViewController.m 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import "iVersionViewController.h" 10 | 11 | @implementation iVersionViewController 12 | 13 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 14 | { 15 | return YES; 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/Examples/Zero Config Demo/Default-568h@2x.png -------------------------------------------------------------------------------- /Examples/Zero Config Demo/MainWindow.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1024 5 | 10D571 6 | 786 7 | 1038.29 8 | 460.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 112 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBCocoaTouchFramework 35 | 36 | 37 | IBFirstResponder 38 | IBCocoaTouchFramework 39 | 40 | 41 | IBCocoaTouchFramework 42 | 43 | 44 | iVersionViewController 45 | 46 | 47 | 1 48 | 49 | IBCocoaTouchFramework 50 | NO 51 | 52 | 53 | 54 | 292 55 | {320, 480} 56 | 57 | 1 58 | MSAxIDEAA 59 | 60 | NO 61 | NO 62 | 63 | IBCocoaTouchFramework 64 | YES 65 | 66 | 67 | 68 | 69 | YES 70 | 71 | 72 | delegate 73 | 74 | 75 | 76 | 4 77 | 78 | 79 | 80 | viewController 81 | 82 | 83 | 84 | 11 85 | 86 | 87 | 88 | window 89 | 90 | 91 | 92 | 14 93 | 94 | 95 | 96 | 97 | YES 98 | 99 | 0 100 | 101 | 102 | 103 | 104 | 105 | -1 106 | 107 | 108 | File's Owner 109 | 110 | 111 | 3 112 | 113 | 114 | iVersion App Delegate 115 | 116 | 117 | -2 118 | 119 | 120 | 121 | 122 | 10 123 | 124 | 125 | 126 | 127 | 12 128 | 129 | 130 | 131 | 132 | 133 | 134 | YES 135 | 136 | YES 137 | -1.CustomClassName 138 | -2.CustomClassName 139 | 10.CustomClassName 140 | 10.IBEditorWindowLastContentRect 141 | 10.IBPluginDependency 142 | 12.IBEditorWindowLastContentRect 143 | 12.IBPluginDependency 144 | 3.CustomClassName 145 | 3.IBPluginDependency 146 | 147 | 148 | YES 149 | UIApplication 150 | UIResponder 151 | iVersionViewController 152 | {{234, 376}, {320, 480}} 153 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 154 | {{525, 346}, {320, 480}} 155 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 156 | iVersionAppDelegate 157 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 158 | 159 | 160 | 161 | YES 162 | 163 | 164 | YES 165 | 166 | 167 | 168 | 169 | YES 170 | 171 | 172 | YES 173 | 174 | 175 | 176 | 15 177 | 178 | 179 | 180 | YES 181 | 182 | UIWindow 183 | UIView 184 | 185 | IBUserSource 186 | 187 | 188 | 189 | 190 | iVersionAppDelegate 191 | NSObject 192 | 193 | YES 194 | 195 | YES 196 | viewController 197 | window 198 | 199 | 200 | YES 201 | iVersionViewController 202 | UIWindow 203 | 204 | 205 | 206 | YES 207 | 208 | YES 209 | viewController 210 | window 211 | 212 | 213 | YES 214 | 215 | viewController 216 | iVersionViewController 217 | 218 | 219 | window 220 | UIWindow 221 | 222 | 223 | 224 | 225 | IBProjectSource 226 | Classes/iVersionAppDelegate.h 227 | 228 | 229 | 230 | iVersionAppDelegate 231 | NSObject 232 | 233 | IBUserSource 234 | 235 | 236 | 237 | 238 | iVersionViewController 239 | UIViewController 240 | 241 | IBProjectSource 242 | Classes/iVersionViewController.h 243 | 244 | 245 | 246 | 247 | YES 248 | 249 | NSObject 250 | 251 | IBFrameworkSource 252 | Foundation.framework/Headers/NSError.h 253 | 254 | 255 | 256 | NSObject 257 | 258 | IBFrameworkSource 259 | Foundation.framework/Headers/NSFileManager.h 260 | 261 | 262 | 263 | NSObject 264 | 265 | IBFrameworkSource 266 | Foundation.framework/Headers/NSKeyValueCoding.h 267 | 268 | 269 | 270 | NSObject 271 | 272 | IBFrameworkSource 273 | Foundation.framework/Headers/NSKeyValueObserving.h 274 | 275 | 276 | 277 | NSObject 278 | 279 | IBFrameworkSource 280 | Foundation.framework/Headers/NSKeyedArchiver.h 281 | 282 | 283 | 284 | NSObject 285 | 286 | IBFrameworkSource 287 | Foundation.framework/Headers/NSObject.h 288 | 289 | 290 | 291 | NSObject 292 | 293 | IBFrameworkSource 294 | Foundation.framework/Headers/NSRunLoop.h 295 | 296 | 297 | 298 | NSObject 299 | 300 | IBFrameworkSource 301 | Foundation.framework/Headers/NSThread.h 302 | 303 | 304 | 305 | NSObject 306 | 307 | IBFrameworkSource 308 | Foundation.framework/Headers/NSURL.h 309 | 310 | 311 | 312 | NSObject 313 | 314 | IBFrameworkSource 315 | Foundation.framework/Headers/NSURLConnection.h 316 | 317 | 318 | 319 | NSObject 320 | 321 | IBFrameworkSource 322 | UIKit.framework/Headers/UIAccessibility.h 323 | 324 | 325 | 326 | NSObject 327 | 328 | IBFrameworkSource 329 | UIKit.framework/Headers/UINibLoading.h 330 | 331 | 332 | 333 | NSObject 334 | 335 | IBFrameworkSource 336 | UIKit.framework/Headers/UIResponder.h 337 | 338 | 339 | 340 | UIApplication 341 | UIResponder 342 | 343 | IBFrameworkSource 344 | UIKit.framework/Headers/UIApplication.h 345 | 346 | 347 | 348 | UIResponder 349 | NSObject 350 | 351 | 352 | 353 | UISearchBar 354 | UIView 355 | 356 | IBFrameworkSource 357 | UIKit.framework/Headers/UISearchBar.h 358 | 359 | 360 | 361 | UISearchDisplayController 362 | NSObject 363 | 364 | IBFrameworkSource 365 | UIKit.framework/Headers/UISearchDisplayController.h 366 | 367 | 368 | 369 | UIView 370 | 371 | IBFrameworkSource 372 | UIKit.framework/Headers/UITextField.h 373 | 374 | 375 | 376 | UIView 377 | UIResponder 378 | 379 | IBFrameworkSource 380 | UIKit.framework/Headers/UIView.h 381 | 382 | 383 | 384 | UIViewController 385 | 386 | IBFrameworkSource 387 | UIKit.framework/Headers/UINavigationController.h 388 | 389 | 390 | 391 | UIViewController 392 | 393 | IBFrameworkSource 394 | UIKit.framework/Headers/UIPopoverController.h 395 | 396 | 397 | 398 | UIViewController 399 | 400 | IBFrameworkSource 401 | UIKit.framework/Headers/UISplitViewController.h 402 | 403 | 404 | 405 | UIViewController 406 | 407 | IBFrameworkSource 408 | UIKit.framework/Headers/UITabBarController.h 409 | 410 | 411 | 412 | UIViewController 413 | UIResponder 414 | 415 | IBFrameworkSource 416 | UIKit.framework/Headers/UIViewController.h 417 | 418 | 419 | 420 | UIWindow 421 | UIView 422 | 423 | IBFrameworkSource 424 | UIKit.framework/Headers/UIWindow.h 425 | 426 | 427 | 428 | 429 | 0 430 | IBCocoaTouchFramework 431 | 432 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 433 | 434 | 435 | 436 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 437 | 438 | 439 | YES 440 | iVersion.xcodeproj 441 | 3 442 | 112 443 | 444 | 445 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/ZeroConfig-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | NSMainNibFile 28 | MainWindow 29 | 30 | 31 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/ZeroConfig.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0160713216610E2500932AE1 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0160713116610E2500932AE1 /* StoreKit.framework */; }; 11 | 0162D1011609FD970043113D /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0162D1001609FD970043113D /* Default-568h@2x.png */; }; 12 | 1D3623260D0F684500981E51 /* iVersionAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* iVersionAppDelegate.m */; }; 13 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 14 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 15 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 16 | 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; 17 | 2899E5220DE3E06400AC0155 /* iVersionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* iVersionViewController.xib */; }; 18 | 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; 19 | 28D7ACF80DDB3853001CB0EB /* iVersionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* iVersionViewController.m */; }; 20 | B205F1FE1462A6BF00B69B0D /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B205F1FD1462A6BF00B69B0D /* iVersion.m */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXFileReference section */ 24 | 0160713116610E2500932AE1 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; 25 | 0162D1001609FD970043113D /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 26 | 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 27 | 1D3623240D0F684500981E51 /* iVersionAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionAppDelegate.h; sourceTree = ""; }; 28 | 1D3623250D0F684500981E51 /* iVersionAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersionAppDelegate.m; sourceTree = ""; }; 29 | 1D6058910D05DD3D006BFB54 /* ZeroConfig.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ZeroConfig.app; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 31 | 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 32 | 2899E5210DE3E06400AC0155 /* iVersionViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = iVersionViewController.xib; sourceTree = ""; }; 33 | 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; 34 | 28D7ACF60DDB3853001CB0EB /* iVersionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionViewController.h; sourceTree = ""; }; 35 | 28D7ACF70DDB3853001CB0EB /* iVersionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersionViewController.m; sourceTree = ""; }; 36 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 37 | 32CA4F630368D1EE00C91783 /* ZeroConfig_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZeroConfig_Prefix.pch; sourceTree = ""; }; 38 | 8D1107310486CEB800E47090 /* ZeroConfig-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "ZeroConfig-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; 39 | B205F1FC1462A6BF00B69B0D /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = ""; }; 40 | B205F1FD1462A6BF00B69B0D /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = ""; }; 41 | /* End PBXFileReference section */ 42 | 43 | /* Begin PBXFrameworksBuildPhase section */ 44 | 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { 45 | isa = PBXFrameworksBuildPhase; 46 | buildActionMask = 2147483647; 47 | files = ( 48 | 0160713216610E2500932AE1 /* StoreKit.framework in Frameworks */, 49 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 50 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 51 | 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 080E96DDFE201D6D7F000001 /* Classes */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 1D3623240D0F684500981E51 /* iVersionAppDelegate.h */, 62 | 1D3623250D0F684500981E51 /* iVersionAppDelegate.m */, 63 | 28D7ACF60DDB3853001CB0EB /* iVersionViewController.h */, 64 | 28D7ACF70DDB3853001CB0EB /* iVersionViewController.m */, 65 | ); 66 | path = Classes; 67 | sourceTree = ""; 68 | }; 69 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | 1D6058910D05DD3D006BFB54 /* ZeroConfig.app */, 73 | ); 74 | name = Products; 75 | sourceTree = ""; 76 | }; 77 | 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | B205F1FB1462A6BF00B69B0D /* iVersion */, 81 | 080E96DDFE201D6D7F000001 /* Classes */, 82 | 29B97315FDCFA39411CA2CEA /* Other Sources */, 83 | 29B97317FDCFA39411CA2CEA /* Resources */, 84 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 85 | 19C28FACFE9D520D11CA2CBB /* Products */, 86 | ); 87 | name = CustomTemplate; 88 | sourceTree = ""; 89 | }; 90 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | 8D1107310486CEB800E47090 /* ZeroConfig-Info.plist */, 94 | 32CA4F630368D1EE00C91783 /* ZeroConfig_Prefix.pch */, 95 | 29B97316FDCFA39411CA2CEA /* main.m */, 96 | ); 97 | name = "Other Sources"; 98 | sourceTree = ""; 99 | }; 100 | 29B97317FDCFA39411CA2CEA /* Resources */ = { 101 | isa = PBXGroup; 102 | children = ( 103 | 0162D1001609FD970043113D /* Default-568h@2x.png */, 104 | 2899E5210DE3E06400AC0155 /* iVersionViewController.xib */, 105 | 28AD733E0D9D9553002E5188 /* MainWindow.xib */, 106 | ); 107 | name = Resources; 108 | sourceTree = ""; 109 | }; 110 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, 114 | 1D30AB110D05D00D00671497 /* Foundation.framework */, 115 | 288765A40DF7441C002DB57D /* CoreGraphics.framework */, 116 | 0160713116610E2500932AE1 /* StoreKit.framework */, 117 | ); 118 | name = Frameworks; 119 | sourceTree = ""; 120 | }; 121 | B205F1FB1462A6BF00B69B0D /* iVersion */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | B205F1FC1462A6BF00B69B0D /* iVersion.h */, 125 | B205F1FD1462A6BF00B69B0D /* iVersion.m */, 126 | ); 127 | name = iVersion; 128 | path = ../../iVersion; 129 | sourceTree = ""; 130 | }; 131 | /* End PBXGroup section */ 132 | 133 | /* Begin PBXNativeTarget section */ 134 | 1D6058900D05DD3D006BFB54 /* ZeroConfig */ = { 135 | isa = PBXNativeTarget; 136 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "ZeroConfig" */; 137 | buildPhases = ( 138 | 1D60588D0D05DD3D006BFB54 /* Resources */, 139 | 1D60588E0D05DD3D006BFB54 /* Sources */, 140 | 1D60588F0D05DD3D006BFB54 /* Frameworks */, 141 | ); 142 | buildRules = ( 143 | ); 144 | dependencies = ( 145 | ); 146 | name = ZeroConfig; 147 | productName = iVersion; 148 | productReference = 1D6058910D05DD3D006BFB54 /* ZeroConfig.app */; 149 | productType = "com.apple.product-type.application"; 150 | }; 151 | /* End PBXNativeTarget section */ 152 | 153 | /* Begin PBXProject section */ 154 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 155 | isa = PBXProject; 156 | attributes = { 157 | LastUpgradeCheck = 0810; 158 | }; 159 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ZeroConfig" */; 160 | compatibilityVersion = "Xcode 3.2"; 161 | developmentRegion = English; 162 | hasScannedForEncodings = 1; 163 | knownRegions = ( 164 | English, 165 | Japanese, 166 | French, 167 | German, 168 | ); 169 | mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; 170 | projectDirPath = ""; 171 | projectRoot = ""; 172 | targets = ( 173 | 1D6058900D05DD3D006BFB54 /* ZeroConfig */, 174 | ); 175 | }; 176 | /* End PBXProject section */ 177 | 178 | /* Begin PBXResourcesBuildPhase section */ 179 | 1D60588D0D05DD3D006BFB54 /* Resources */ = { 180 | isa = PBXResourcesBuildPhase; 181 | buildActionMask = 2147483647; 182 | files = ( 183 | 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */, 184 | 2899E5220DE3E06400AC0155 /* iVersionViewController.xib in Resources */, 185 | 0162D1011609FD970043113D /* Default-568h@2x.png in Resources */, 186 | ); 187 | runOnlyForDeploymentPostprocessing = 0; 188 | }; 189 | /* End PBXResourcesBuildPhase section */ 190 | 191 | /* Begin PBXSourcesBuildPhase section */ 192 | 1D60588E0D05DD3D006BFB54 /* Sources */ = { 193 | isa = PBXSourcesBuildPhase; 194 | buildActionMask = 2147483647; 195 | files = ( 196 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */, 197 | 1D3623260D0F684500981E51 /* iVersionAppDelegate.m in Sources */, 198 | 28D7ACF80DDB3853001CB0EB /* iVersionViewController.m in Sources */, 199 | B205F1FE1462A6BF00B69B0D /* iVersion.m in Sources */, 200 | ); 201 | runOnlyForDeploymentPostprocessing = 0; 202 | }; 203 | /* End PBXSourcesBuildPhase section */ 204 | 205 | /* Begin XCBuildConfiguration section */ 206 | 1D6058940D05DD3E006BFB54 /* Debug */ = { 207 | isa = XCBuildConfiguration; 208 | buildSettings = { 209 | ALWAYS_SEARCH_USER_PATHS = NO; 210 | CLANG_ENABLE_OBJC_ARC = YES; 211 | COPY_PHASE_STRIP = NO; 212 | GCC_DYNAMIC_NO_PIC = NO; 213 | GCC_OPTIMIZATION_LEVEL = 0; 214 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 215 | GCC_PREFIX_HEADER = ZeroConfig_Prefix.pch; 216 | INFOPLIST_FILE = "ZeroConfig-Info.plist"; 217 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 218 | PRODUCT_BUNDLE_IDENTIFIER = "com.charcoaldesign.rainbowblocks-free"; 219 | PRODUCT_NAME = ZeroConfig; 220 | }; 221 | name = Debug; 222 | }; 223 | 1D6058950D05DD3E006BFB54 /* Release */ = { 224 | isa = XCBuildConfiguration; 225 | buildSettings = { 226 | ALWAYS_SEARCH_USER_PATHS = NO; 227 | CLANG_ENABLE_OBJC_ARC = YES; 228 | COPY_PHASE_STRIP = YES; 229 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 230 | GCC_PREFIX_HEADER = ZeroConfig_Prefix.pch; 231 | INFOPLIST_FILE = "ZeroConfig-Info.plist"; 232 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 233 | PRODUCT_BUNDLE_IDENTIFIER = "com.charcoaldesign.rainbowblocks-free"; 234 | PRODUCT_NAME = ZeroConfig; 235 | VALIDATE_PRODUCT = YES; 236 | }; 237 | name = Release; 238 | }; 239 | C01FCF4F08A954540054247B /* Debug */ = { 240 | isa = XCBuildConfiguration; 241 | buildSettings = { 242 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 243 | CLANG_WARN_BOOL_CONVERSION = YES; 244 | CLANG_WARN_CONSTANT_CONVERSION = YES; 245 | CLANG_WARN_EMPTY_BODY = YES; 246 | CLANG_WARN_ENUM_CONVERSION = YES; 247 | CLANG_WARN_INFINITE_RECURSION = YES; 248 | CLANG_WARN_INT_CONVERSION = YES; 249 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 250 | CLANG_WARN_UNREACHABLE_CODE = YES; 251 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 252 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 253 | ENABLE_STRICT_OBJC_MSGSEND = YES; 254 | ENABLE_TESTABILITY = YES; 255 | GCC_C_LANGUAGE_STANDARD = c99; 256 | GCC_NO_COMMON_BLOCKS = YES; 257 | GCC_TREAT_WARNINGS_AS_ERRORS = YES; 258 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 259 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 260 | GCC_WARN_UNDECLARED_SELECTOR = YES; 261 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 262 | GCC_WARN_UNUSED_FUNCTION = YES; 263 | GCC_WARN_UNUSED_VARIABLE = YES; 264 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 265 | ONLY_ACTIVE_ARCH = YES; 266 | RUN_CLANG_STATIC_ANALYZER = YES; 267 | SDKROOT = iphoneos; 268 | }; 269 | name = Debug; 270 | }; 271 | C01FCF5008A954540054247B /* Release */ = { 272 | isa = XCBuildConfiguration; 273 | buildSettings = { 274 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 275 | CLANG_WARN_BOOL_CONVERSION = YES; 276 | CLANG_WARN_CONSTANT_CONVERSION = YES; 277 | CLANG_WARN_EMPTY_BODY = YES; 278 | CLANG_WARN_ENUM_CONVERSION = YES; 279 | CLANG_WARN_INFINITE_RECURSION = YES; 280 | CLANG_WARN_INT_CONVERSION = YES; 281 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 282 | CLANG_WARN_UNREACHABLE_CODE = YES; 283 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 284 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 285 | ENABLE_STRICT_OBJC_MSGSEND = YES; 286 | GCC_C_LANGUAGE_STANDARD = c99; 287 | GCC_NO_COMMON_BLOCKS = YES; 288 | GCC_TREAT_WARNINGS_AS_ERRORS = YES; 289 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 290 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 291 | GCC_WARN_UNDECLARED_SELECTOR = YES; 292 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 293 | GCC_WARN_UNUSED_FUNCTION = YES; 294 | GCC_WARN_UNUSED_VARIABLE = YES; 295 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 296 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 297 | RUN_CLANG_STATIC_ANALYZER = YES; 298 | SDKROOT = iphoneos; 299 | }; 300 | name = Release; 301 | }; 302 | /* End XCBuildConfiguration section */ 303 | 304 | /* Begin XCConfigurationList section */ 305 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "ZeroConfig" */ = { 306 | isa = XCConfigurationList; 307 | buildConfigurations = ( 308 | 1D6058940D05DD3E006BFB54 /* Debug */, 309 | 1D6058950D05DD3E006BFB54 /* Release */, 310 | ); 311 | defaultConfigurationIsVisible = 0; 312 | defaultConfigurationName = Release; 313 | }; 314 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ZeroConfig" */ = { 315 | isa = XCConfigurationList; 316 | buildConfigurations = ( 317 | C01FCF4F08A954540054247B /* Debug */, 318 | C01FCF5008A954540054247B /* Release */, 319 | ); 320 | defaultConfigurationIsVisible = 0; 321 | defaultConfigurationName = Release; 322 | }; 323 | /* End XCConfigurationList section */ 324 | }; 325 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 326 | } 327 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/ZeroConfig.xcodeproj/xcshareddata/xcschemes/ZeroConfig.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/ZeroConfig_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'iVersion' target in the 'iVersion' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #import 8 | #endif 9 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/iVersionViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 800 5 | 10C540 6 | 759 7 | 1038.25 8 | 458.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 77 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBCocoaTouchFramework 35 | 36 | 37 | IBFirstResponder 38 | IBCocoaTouchFramework 39 | 40 | 41 | 42 | 274 43 | {320, 460} 44 | 45 | 46 | 3 47 | MC43NQA 48 | 49 | 2 50 | 51 | 52 | NO 53 | 54 | IBCocoaTouchFramework 55 | 56 | 57 | 58 | 59 | YES 60 | 61 | 62 | view 63 | 64 | 65 | 66 | 7 67 | 68 | 69 | 70 | 71 | YES 72 | 73 | 0 74 | 75 | 76 | 77 | 78 | 79 | -1 80 | 81 | 82 | File's Owner 83 | 84 | 85 | -2 86 | 87 | 88 | 89 | 90 | 6 91 | 92 | 93 | 94 | 95 | 96 | 97 | YES 98 | 99 | YES 100 | -1.CustomClassName 101 | -2.CustomClassName 102 | 6.IBEditorWindowLastContentRect 103 | 6.IBPluginDependency 104 | 105 | 106 | YES 107 | iVersionViewController 108 | UIResponder 109 | {{239, 654}, {320, 480}} 110 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 111 | 112 | 113 | 114 | YES 115 | 116 | 117 | YES 118 | 119 | 120 | 121 | 122 | YES 123 | 124 | 125 | YES 126 | 127 | 128 | 129 | 7 130 | 131 | 132 | 133 | YES 134 | 135 | iVersionViewController 136 | UIViewController 137 | 138 | IBProjectSource 139 | Classes/iVersionViewController.h 140 | 141 | 142 | 143 | 144 | 0 145 | IBCocoaTouchFramework 146 | 147 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 148 | 149 | 150 | YES 151 | iVersion.xcodeproj 152 | 3 153 | 77 154 | 155 | 156 | 157 | -------------------------------------------------------------------------------- /Examples/Zero Config Demo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) { 12 | 13 | @autoreleasepool { 14 | int retVal = UIApplicationMain(argc, argv, nil, nil); 15 | return retVal; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/Classes/iVersionAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionAppDelegate.h 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class iVersionViewController; 12 | 13 | @interface iVersionAppDelegate : NSObject 14 | 15 | @property (nonatomic, strong) IBOutlet UIWindow *window; 16 | @property (nonatomic, strong) IBOutlet iVersionViewController *viewController; 17 | 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/Classes/iVersionAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionAppDelegate.m 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import "iVersionAppDelegate.h" 10 | #import "iVersionViewController.h" 11 | #import "iVersion.h" 12 | 13 | 14 | @implementation iVersionAppDelegate 15 | 16 | @synthesize window; 17 | @synthesize viewController; 18 | 19 | 20 | #pragma mark - 21 | #pragma mark Application lifecycle 22 | 23 | + (void)initialize 24 | { 25 | //set the bundle ID. normally you wouldn't need to do this 26 | //as it is picked up automatically from your Info.plist file 27 | //but we want to test with an app that's actually on the store 28 | [iVersion sharedInstance].applicationBundleID = @"com.charcoaldesign.rainbowblocks-free"; 29 | 30 | //configure iVersion. These paths are optional - if you don't set 31 | //them, iVersion will just get the release notes from iTunes directly (if your app is on the store) 32 | [iVersion sharedInstance].remoteVersionsPlistURL = @"http://charcoaldesign.co.uk/iVersion/versions.plist"; 33 | [iVersion sharedInstance].localVersionsPlistPath = @"versions.plist"; 34 | } 35 | 36 | - (BOOL)application:(__unused UIApplication *)application didFinishLaunchingWithOptions:(__unused NSDictionary *)launchOptions 37 | { 38 | [self.window addSubview:self.viewController.view]; 39 | [self.window makeKeyAndVisible]; 40 | return YES; 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/Classes/iVersionViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionViewController.h 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface iVersionViewController : UIViewController 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/Classes/iVersionViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // iVersionViewController.m 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import "iVersionViewController.h" 10 | 11 | @implementation iVersionViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/Examples/iPhone Demo/Default-568h@2x.png -------------------------------------------------------------------------------- /Examples/iPhone Demo/MainWindow.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1536 5 | 12B19 6 | 2840 7 | 1187 8 | 624.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1926 12 | 13 | 14 | YES 15 | IBProxyObject 16 | IBUICustomObject 17 | IBUIViewController 18 | IBUIWindow 19 | 20 | 21 | YES 22 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 23 | 24 | 25 | PluginDependencyRecalculationVersion 26 | 27 | 28 | 29 | YES 30 | 31 | IBFilesOwner 32 | IBCocoaTouchFramework 33 | 34 | 35 | IBFirstResponder 36 | IBCocoaTouchFramework 37 | 38 | 39 | IBCocoaTouchFramework 40 | 41 | 42 | iVersionViewController 43 | 44 | 45 | 1 46 | 1 47 | 48 | IBCocoaTouchFramework 49 | NO 50 | 51 | 52 | 53 | 292 54 | {320, 480} 55 | 56 | 1 57 | MSAxIDEAA 58 | 59 | NO 60 | NO 61 | 62 | IBCocoaTouchFramework 63 | YES 64 | 65 | 66 | 67 | 68 | YES 69 | 70 | 71 | delegate 72 | 73 | 74 | 75 | 4 76 | 77 | 78 | 79 | viewController 80 | 81 | 82 | 83 | 11 84 | 85 | 86 | 87 | window 88 | 89 | 90 | 91 | 14 92 | 93 | 94 | 95 | rootViewController 96 | 97 | 98 | 99 | 16 100 | 101 | 102 | 103 | 104 | YES 105 | 106 | 0 107 | 108 | YES 109 | 110 | 111 | 112 | 113 | 114 | -1 115 | 116 | 117 | File's Owner 118 | 119 | 120 | 3 121 | 122 | 123 | iVersion App Delegate 124 | 125 | 126 | -2 127 | 128 | 129 | 130 | 131 | 10 132 | 133 | 134 | 135 | 136 | 12 137 | 138 | 139 | 140 | 141 | 142 | 143 | YES 144 | 145 | YES 146 | -1.CustomClassName 147 | -1.IBPluginDependency 148 | -2.CustomClassName 149 | -2.IBPluginDependency 150 | 10.CustomClassName 151 | 10.IBPluginDependency 152 | 12.IBPluginDependency 153 | 3.CustomClassName 154 | 3.IBPluginDependency 155 | 156 | 157 | YES 158 | UIApplication 159 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 160 | UIResponder 161 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 162 | iVersionViewController 163 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 164 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 165 | iVersionAppDelegate 166 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 167 | 168 | 169 | 170 | YES 171 | 172 | 173 | 174 | 175 | 176 | YES 177 | 178 | 179 | 180 | 181 | 16 182 | 183 | 184 | 185 | YES 186 | 187 | iVersionAppDelegate 188 | NSObject 189 | 190 | YES 191 | 192 | YES 193 | viewController 194 | window 195 | 196 | 197 | YES 198 | iVersionViewController 199 | UIWindow 200 | 201 | 202 | 203 | YES 204 | 205 | YES 206 | viewController 207 | window 208 | 209 | 210 | YES 211 | 212 | viewController 213 | iVersionViewController 214 | 215 | 216 | window 217 | UIWindow 218 | 219 | 220 | 221 | 222 | IBProjectSource 223 | ./Classes/iVersionAppDelegate.h 224 | 225 | 226 | 227 | iVersionViewController 228 | UIViewController 229 | 230 | IBProjectSource 231 | ./Classes/iVersionViewController.h 232 | 233 | 234 | 235 | 236 | 0 237 | IBCocoaTouchFramework 238 | 239 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 240 | 241 | 242 | 243 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 244 | 245 | 246 | YES 247 | 3 248 | 1926 249 | 250 | 251 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/iVersion-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | NSMainNibFile 28 | MainWindow 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationPortraitUpsideDown 33 | UIInterfaceOrientationLandscapeLeft 34 | UIInterfaceOrientationLandscapeRight 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/iVersion.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0162D0E21609F3420043113D /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0162D0E11609F3420043113D /* Default-568h@2x.png */; }; 11 | 018D55C8166045C3005DE12D /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018D55C7166045C3005DE12D /* StoreKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 12 | 01E880F0151652CD00BFF881 /* iVersion.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 01E880EF151652CD00BFF881 /* iVersion.bundle */; }; 13 | 1D3623260D0F684500981E51 /* iVersionAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* iVersionAppDelegate.m */; }; 14 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 15 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 16 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 17 | 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; 18 | 2899E5220DE3E06400AC0155 /* iVersionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* iVersionViewController.xib */; }; 19 | 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; 20 | 28D7ACF80DDB3853001CB0EB /* iVersionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* iVersionViewController.m */; }; 21 | B205F1FE1462A6BF00B69B0D /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B205F1FD1462A6BF00B69B0D /* iVersion.m */; }; 22 | B22F022812F02A1E00C7AA1E /* versions.plist in Resources */ = {isa = PBXBuildFile; fileRef = B22F022712F02A1E00C7AA1E /* versions.plist */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXFileReference section */ 26 | 0162D0E11609F3420043113D /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 27 | 018D55C7166045C3005DE12D /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; 28 | 01E880EF151652CD00BFF881 /* iVersion.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = iVersion.bundle; sourceTree = ""; }; 29 | 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 30 | 1D3623240D0F684500981E51 /* iVersionAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionAppDelegate.h; sourceTree = ""; }; 31 | 1D3623250D0F684500981E51 /* iVersionAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersionAppDelegate.m; sourceTree = ""; }; 32 | 1D6058910D05DD3D006BFB54 /* iVersion.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iVersion.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 34 | 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 35 | 2899E5210DE3E06400AC0155 /* iVersionViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = iVersionViewController.xib; sourceTree = ""; }; 36 | 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; 37 | 28D7ACF60DDB3853001CB0EB /* iVersionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersionViewController.h; sourceTree = ""; }; 38 | 28D7ACF70DDB3853001CB0EB /* iVersionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersionViewController.m; sourceTree = ""; }; 39 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 40 | 32CA4F630368D1EE00C91783 /* iVersion_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion_Prefix.pch; sourceTree = ""; }; 41 | 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 = ""; }; 42 | B205F1FC1462A6BF00B69B0D /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iVersion.h; sourceTree = ""; }; 43 | B205F1FD1462A6BF00B69B0D /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iVersion.m; sourceTree = ""; }; 44 | B22F022712F02A1E00C7AA1E /* versions.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = versions.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | 018D55C8166045C3005DE12D /* StoreKit.framework in Frameworks */, 53 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 54 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 55 | 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, 56 | ); 57 | runOnlyForDeploymentPostprocessing = 0; 58 | }; 59 | /* End PBXFrameworksBuildPhase section */ 60 | 61 | /* Begin PBXGroup section */ 62 | 080E96DDFE201D6D7F000001 /* Classes */ = { 63 | isa = PBXGroup; 64 | children = ( 65 | 1D3623240D0F684500981E51 /* iVersionAppDelegate.h */, 66 | 1D3623250D0F684500981E51 /* iVersionAppDelegate.m */, 67 | 28D7ACF60DDB3853001CB0EB /* iVersionViewController.h */, 68 | 28D7ACF70DDB3853001CB0EB /* iVersionViewController.m */, 69 | ); 70 | path = Classes; 71 | sourceTree = ""; 72 | }; 73 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | 1D6058910D05DD3D006BFB54 /* iVersion.app */, 77 | ); 78 | name = Products; 79 | sourceTree = ""; 80 | }; 81 | 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | B205F1FB1462A6BF00B69B0D /* iVersion */, 85 | 080E96DDFE201D6D7F000001 /* Classes */, 86 | 29B97315FDCFA39411CA2CEA /* Other Sources */, 87 | 29B97317FDCFA39411CA2CEA /* Resources */, 88 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 89 | 19C28FACFE9D520D11CA2CBB /* Products */, 90 | ); 91 | name = CustomTemplate; 92 | sourceTree = ""; 93 | }; 94 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 8D1107310486CEB800E47090 /* iVersion-Info.plist */, 98 | 32CA4F630368D1EE00C91783 /* iVersion_Prefix.pch */, 99 | 29B97316FDCFA39411CA2CEA /* main.m */, 100 | ); 101 | name = "Other Sources"; 102 | sourceTree = ""; 103 | }; 104 | 29B97317FDCFA39411CA2CEA /* Resources */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 0162D0E11609F3420043113D /* Default-568h@2x.png */, 108 | 2899E5210DE3E06400AC0155 /* iVersionViewController.xib */, 109 | 28AD733E0D9D9553002E5188 /* MainWindow.xib */, 110 | B22F022712F02A1E00C7AA1E /* versions.plist */, 111 | ); 112 | name = Resources; 113 | sourceTree = ""; 114 | }; 115 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, 119 | 1D30AB110D05D00D00671497 /* Foundation.framework */, 120 | 288765A40DF7441C002DB57D /* CoreGraphics.framework */, 121 | 018D55C7166045C3005DE12D /* StoreKit.framework */, 122 | ); 123 | name = Frameworks; 124 | sourceTree = ""; 125 | }; 126 | B205F1FB1462A6BF00B69B0D /* iVersion */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 01E880EF151652CD00BFF881 /* iVersion.bundle */, 130 | B205F1FC1462A6BF00B69B0D /* iVersion.h */, 131 | B205F1FD1462A6BF00B69B0D /* iVersion.m */, 132 | ); 133 | name = iVersion; 134 | path = ../../iVersion; 135 | sourceTree = ""; 136 | }; 137 | /* End PBXGroup section */ 138 | 139 | /* Begin PBXNativeTarget section */ 140 | 1D6058900D05DD3D006BFB54 /* iVersion */ = { 141 | isa = PBXNativeTarget; 142 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "iVersion" */; 143 | buildPhases = ( 144 | 1D60588D0D05DD3D006BFB54 /* Resources */, 145 | 1D60588E0D05DD3D006BFB54 /* Sources */, 146 | 1D60588F0D05DD3D006BFB54 /* Frameworks */, 147 | ); 148 | buildRules = ( 149 | ); 150 | dependencies = ( 151 | ); 152 | name = iVersion; 153 | productName = iVersion; 154 | productReference = 1D6058910D05DD3D006BFB54 /* iVersion.app */; 155 | productType = "com.apple.product-type.application"; 156 | }; 157 | /* End PBXNativeTarget section */ 158 | 159 | /* Begin PBXProject section */ 160 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 161 | isa = PBXProject; 162 | attributes = { 163 | LastUpgradeCheck = 0810; 164 | }; 165 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iVersion" */; 166 | compatibilityVersion = "Xcode 3.2"; 167 | developmentRegion = English; 168 | hasScannedForEncodings = 1; 169 | knownRegions = ( 170 | English, 171 | Japanese, 172 | French, 173 | German, 174 | ); 175 | mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; 176 | projectDirPath = ""; 177 | projectRoot = ""; 178 | targets = ( 179 | 1D6058900D05DD3D006BFB54 /* iVersion */, 180 | ); 181 | }; 182 | /* End PBXProject section */ 183 | 184 | /* Begin PBXResourcesBuildPhase section */ 185 | 1D60588D0D05DD3D006BFB54 /* Resources */ = { 186 | isa = PBXResourcesBuildPhase; 187 | buildActionMask = 2147483647; 188 | files = ( 189 | 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */, 190 | 2899E5220DE3E06400AC0155 /* iVersionViewController.xib in Resources */, 191 | B22F022812F02A1E00C7AA1E /* versions.plist in Resources */, 192 | 01E880F0151652CD00BFF881 /* iVersion.bundle in Resources */, 193 | 0162D0E21609F3420043113D /* Default-568h@2x.png in Resources */, 194 | ); 195 | runOnlyForDeploymentPostprocessing = 0; 196 | }; 197 | /* End PBXResourcesBuildPhase section */ 198 | 199 | /* Begin PBXSourcesBuildPhase section */ 200 | 1D60588E0D05DD3D006BFB54 /* Sources */ = { 201 | isa = PBXSourcesBuildPhase; 202 | buildActionMask = 2147483647; 203 | files = ( 204 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */, 205 | 1D3623260D0F684500981E51 /* iVersionAppDelegate.m in Sources */, 206 | 28D7ACF80DDB3853001CB0EB /* iVersionViewController.m in Sources */, 207 | B205F1FE1462A6BF00B69B0D /* iVersion.m in Sources */, 208 | ); 209 | runOnlyForDeploymentPostprocessing = 0; 210 | }; 211 | /* End PBXSourcesBuildPhase section */ 212 | 213 | /* Begin XCBuildConfiguration section */ 214 | 1D6058940D05DD3E006BFB54 /* Debug */ = { 215 | isa = XCBuildConfiguration; 216 | buildSettings = { 217 | ALWAYS_SEARCH_USER_PATHS = NO; 218 | CLANG_ENABLE_OBJC_ARC = YES; 219 | COPY_PHASE_STRIP = NO; 220 | GCC_DYNAMIC_NO_PIC = NO; 221 | GCC_OPTIMIZATION_LEVEL = 0; 222 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 223 | GCC_PREFIX_HEADER = iVersion_Prefix.pch; 224 | GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; 225 | INFOPLIST_FILE = "iVersion-Info.plist"; 226 | PRODUCT_BUNDLE_IDENTIFIER = "com.charcoaldesign.${PRODUCT_NAME:rfc1034identifier}"; 227 | PRODUCT_NAME = iVersion; 228 | }; 229 | name = Debug; 230 | }; 231 | 1D6058950D05DD3E006BFB54 /* Release */ = { 232 | isa = XCBuildConfiguration; 233 | buildSettings = { 234 | ALWAYS_SEARCH_USER_PATHS = NO; 235 | CLANG_ENABLE_OBJC_ARC = YES; 236 | COPY_PHASE_STRIP = YES; 237 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 238 | GCC_PREFIX_HEADER = iVersion_Prefix.pch; 239 | INFOPLIST_FILE = "iVersion-Info.plist"; 240 | PRODUCT_BUNDLE_IDENTIFIER = "com.charcoaldesign.${PRODUCT_NAME:rfc1034identifier}"; 241 | PRODUCT_NAME = iVersion; 242 | VALIDATE_PRODUCT = YES; 243 | }; 244 | name = Release; 245 | }; 246 | C01FCF4F08A954540054247B /* Debug */ = { 247 | isa = XCBuildConfiguration; 248 | buildSettings = { 249 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 250 | CLANG_WARN_CXX0X_EXTENSIONS = YES; 251 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 252 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 253 | CLANG_WARN_EMPTY_BODY = YES; 254 | CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; 255 | CLANG_WARN_INFINITE_RECURSION = YES; 256 | CLANG_WARN_OBJC_EXPLICIT_OWNERSHIP_TYPE = YES; 257 | CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES; 258 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 259 | CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS = YES; 260 | CLANG_WARN_OBJC_RECEIVER_WEAK = YES; 261 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES; 262 | CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; 263 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 264 | CLANG_WARN_UNREACHABLE_CODE = YES; 265 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 266 | CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; 267 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 268 | ENABLE_STRICT_OBJC_MSGSEND = YES; 269 | ENABLE_TESTABILITY = YES; 270 | GCC_C_LANGUAGE_STANDARD = c99; 271 | GCC_NO_COMMON_BLOCKS = YES; 272 | GCC_SHORT_ENUMS = YES; 273 | GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; 274 | GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; 275 | GCC_TREAT_WARNINGS_AS_ERRORS = YES; 276 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 277 | GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; 278 | GCC_WARN_ABOUT_MISSING_NEWLINE = YES; 279 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 280 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 281 | GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; 282 | GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; 283 | GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; 284 | GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES; 285 | GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; 286 | GCC_WARN_PEDANTIC = YES; 287 | GCC_WARN_SHADOW = YES; 288 | GCC_WARN_SIGN_COMPARE = YES; 289 | GCC_WARN_STRICT_SELECTOR_MATCH = YES; 290 | GCC_WARN_UNDECLARED_SELECTOR = YES; 291 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 292 | GCC_WARN_UNKNOWN_PRAGMAS = YES; 293 | GCC_WARN_UNUSED_FUNCTION = YES; 294 | GCC_WARN_UNUSED_LABEL = YES; 295 | GCC_WARN_UNUSED_PARAMETER = YES; 296 | GCC_WARN_UNUSED_VARIABLE = YES; 297 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 298 | ONLY_ACTIVE_ARCH = YES; 299 | RUN_CLANG_STATIC_ANALYZER = YES; 300 | SDKROOT = iphoneos; 301 | WARNING_CFLAGS = ( 302 | "-Weverything", 303 | "-Wno-objc-missing-property-synthesis", 304 | ); 305 | }; 306 | name = Debug; 307 | }; 308 | C01FCF5008A954540054247B /* Release */ = { 309 | isa = XCBuildConfiguration; 310 | buildSettings = { 311 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 312 | CLANG_WARN_CXX0X_EXTENSIONS = YES; 313 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 314 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 315 | CLANG_WARN_EMPTY_BODY = YES; 316 | CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; 317 | CLANG_WARN_INFINITE_RECURSION = YES; 318 | CLANG_WARN_OBJC_EXPLICIT_OWNERSHIP_TYPE = YES; 319 | CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES; 320 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 321 | CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS = YES; 322 | CLANG_WARN_OBJC_RECEIVER_WEAK = YES; 323 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES; 324 | CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; 325 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 326 | CLANG_WARN_UNREACHABLE_CODE = YES; 327 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 328 | CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; 329 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 330 | ENABLE_STRICT_OBJC_MSGSEND = YES; 331 | GCC_C_LANGUAGE_STANDARD = c99; 332 | GCC_NO_COMMON_BLOCKS = YES; 333 | GCC_SHORT_ENUMS = YES; 334 | GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; 335 | GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; 336 | GCC_TREAT_WARNINGS_AS_ERRORS = YES; 337 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 338 | GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; 339 | GCC_WARN_ABOUT_MISSING_NEWLINE = YES; 340 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 341 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 342 | GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; 343 | GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; 344 | GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; 345 | GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES; 346 | GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; 347 | GCC_WARN_PEDANTIC = YES; 348 | GCC_WARN_SHADOW = YES; 349 | GCC_WARN_SIGN_COMPARE = YES; 350 | GCC_WARN_STRICT_SELECTOR_MATCH = YES; 351 | GCC_WARN_UNDECLARED_SELECTOR = YES; 352 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 353 | GCC_WARN_UNKNOWN_PRAGMAS = YES; 354 | GCC_WARN_UNUSED_FUNCTION = YES; 355 | GCC_WARN_UNUSED_LABEL = YES; 356 | GCC_WARN_UNUSED_PARAMETER = YES; 357 | GCC_WARN_UNUSED_VARIABLE = YES; 358 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 359 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 360 | RUN_CLANG_STATIC_ANALYZER = YES; 361 | SDKROOT = iphoneos; 362 | WARNING_CFLAGS = ( 363 | "-Weverything", 364 | "-Wno-objc-missing-property-synthesis", 365 | ); 366 | }; 367 | name = Release; 368 | }; 369 | /* End XCBuildConfiguration section */ 370 | 371 | /* Begin XCConfigurationList section */ 372 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "iVersion" */ = { 373 | isa = XCConfigurationList; 374 | buildConfigurations = ( 375 | 1D6058940D05DD3E006BFB54 /* Debug */, 376 | 1D6058950D05DD3E006BFB54 /* Release */, 377 | ); 378 | defaultConfigurationIsVisible = 0; 379 | defaultConfigurationName = Release; 380 | }; 381 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iVersion" */ = { 382 | isa = XCConfigurationList; 383 | buildConfigurations = ( 384 | C01FCF4F08A954540054247B /* Debug */, 385 | C01FCF5008A954540054247B /* Release */, 386 | ); 387 | defaultConfigurationIsVisible = 0; 388 | defaultConfigurationName = Release; 389 | }; 390 | /* End XCConfigurationList section */ 391 | }; 392 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 393 | } 394 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/iVersion.xcodeproj/xcshareddata/xcschemes/iVersion.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/iVersionViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 800 5 | 10C540 6 | 759 7 | 1038.25 8 | 458.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 77 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBCocoaTouchFramework 35 | 36 | 37 | IBFirstResponder 38 | IBCocoaTouchFramework 39 | 40 | 41 | 42 | 274 43 | {320, 460} 44 | 45 | 46 | 3 47 | MC43NQA 48 | 49 | 2 50 | 51 | 52 | NO 53 | 54 | IBCocoaTouchFramework 55 | 56 | 57 | 58 | 59 | YES 60 | 61 | 62 | view 63 | 64 | 65 | 66 | 7 67 | 68 | 69 | 70 | 71 | YES 72 | 73 | 0 74 | 75 | 76 | 77 | 78 | 79 | -1 80 | 81 | 82 | File's Owner 83 | 84 | 85 | -2 86 | 87 | 88 | 89 | 90 | 6 91 | 92 | 93 | 94 | 95 | 96 | 97 | YES 98 | 99 | YES 100 | -1.CustomClassName 101 | -2.CustomClassName 102 | 6.IBEditorWindowLastContentRect 103 | 6.IBPluginDependency 104 | 105 | 106 | YES 107 | iVersionViewController 108 | UIResponder 109 | {{239, 654}, {320, 480}} 110 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 111 | 112 | 113 | 114 | YES 115 | 116 | 117 | YES 118 | 119 | 120 | 121 | 122 | YES 123 | 124 | 125 | YES 126 | 127 | 128 | 129 | 7 130 | 131 | 132 | 133 | YES 134 | 135 | iVersionViewController 136 | UIViewController 137 | 138 | IBProjectSource 139 | Classes/iVersionViewController.h 140 | 141 | 142 | 143 | 144 | 0 145 | IBCocoaTouchFramework 146 | 147 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 148 | 149 | 150 | YES 151 | iVersion.xcodeproj 152 | 3 153 | 77 154 | 155 | 156 | 157 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/iVersion_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'iVersion' target in the 'iVersion' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #import 8 | #endif 9 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // iVersion 4 | // 5 | // Created by Nick Lockwood on 26/01/2011. 6 | // Copyright 2011 Charcoal Design. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) { 12 | 13 | @autoreleasepool { 14 | int retVal = UIApplicationMain(argc, argv, nil, nil); 15 | return retVal; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Examples/iPhone Demo/versions.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1.0 6 | 7 | First release 8 | 9 | 1.1 10 | 11 | NEW: Added new snoodlebar feature 12 | FIX: Fixed the bugalloo glitch 13 | 14 | 1.2 15 | 16 | NEW: Some important feature 17 | FIX: Some important bug fix 18 | CHANGE: Some significant change 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /LICENCE.md: -------------------------------------------------------------------------------- 1 | iVersion 2 | 3 | Copyright (C) 2011 Charcoal Design 4 | 5 | This software is provided 'as-is', without any express or implied 6 | warranty. In no event will the authors be held liable for any damages 7 | arising from the use of this software. 8 | 9 | Permission is granted to anyone to use this software for any purpose, 10 | including commercial applications, and to alter it and redistribute it 11 | freely, subject to the following restrictions: 12 | 13 | 1. The origin of this software must not be misrepresented; you must not 14 | claim that you wrote the original software. If you use this software 15 | in a product, an acknowledgment in the product documentation would be 16 | appreciated but is not required. 17 | 18 | 2. Altered source versions must be plainly marked as such, and must not be 19 | misrepresented as being the original software. 20 | 21 | 3. This notice may not be removed or altered from any source distribution. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | *************** 2 | WARNING: THIS PROJECT IS DEPRECATED 3 | ==================================== 4 | It will not receive any future updates or bug fixes. If you are using it, please migrate to another solution. 5 | *************** 6 | 7 | 8 | Purpose 9 | -------------- 10 | 11 | The Mac and iOS App Store update mechanism is somewhat cumbersome and disconnected from the apps themselves. Users often fail to notice when new versions of an app are released, and if they do notice, the App Store's "download all" option means that users often won't see the release notes for the new versions of each of their apps. 12 | 13 | Whilst it is not permitted to update an App Store app from within the app itself, there is no reason why an app should not inform the user that the new release is ready, and direct them to the App Store to download the update. 14 | 15 | And if your app is not on the App Store, either because it's an in-house/enterprise iOS app, or a Mac app delivered to customers outside of the store, you can't use the App Store update mechanism anyway. 16 | 17 | iVersion is a simple, *zero-config* class to allow iPhone and Mac App Store apps to automatically check for updates and inform the user about new features. 18 | 19 | iVersion automatically detects when the new version of an app is released on the App Store and informs the user with a helpful alert that links them directly to the app download page. 20 | 21 | Or if your app is not on the store, iVersion lets you specify a remote plist file to check for new releases, and a download URL where users can get the latest release. 22 | 23 | iVersion has an additional function, which is to tell users about important new features when they first run an app after downloading a new version. 24 | 25 | 26 | Supported OS & SDK Versions 27 | ----------------------------- 28 | 29 | * Supported build target - iOS 10.1 / Mac OS 10.11 (Xcode 8.1, Apple LLVM compiler 8.0) 30 | * Earliest supported deployment target - iOS 6.0 / Mac OS 10.7 31 | * Earliest compatible deployment target - iOS 4.3 / Mac OS 10.6 32 | 33 | NOTE: 'Supported' means that the library has been tested with this version. 'Compatible' means that the library should work on this OS 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. 34 | 35 | 36 | ARC Compatibility 37 | ------------------ 38 | 39 | As of version 1.10, iVersion requires ARC. If you wish to use iVersion in a non-ARC project, just add the -fobjc-arc compiler flag to the iVersion.m class. To do this, go to the Build Phases tab in your target settings, open the Compile Sources group, double-click iVersion.m in the list and type -fobjc-arc into the popover. 40 | 41 | If you wish to convert your whole project to ARC, comment out the #error line in iVersion.m, then run the Edit > Refactor > Convert to Objective-C ARC... tool in Xcode and make sure all files that you wish to use ARC for (including iVersion.m) are checked. 42 | 43 | 44 | Thread Safety 45 | -------------- 46 | 47 | iVersion uses threading internally to avoid blocking the UI, but none of the iVersion external interfaces are thread safe and you should not call any methods or set any properties on iVersion except from the main thread. 48 | 49 | 50 | Installation 51 | -------------- 52 | 53 | To install iVersion into your app, drag the iVersion.h, .m and .bundle files into your project. You can omit the .bundle if you are not interested in localised copy. If you are using the IVERSION_USE_STOREKIT option (iOS only), you will also need to add the StoreKit framework. 54 | 55 | iVersion typically requires no configuration at all and will simply run automatically, using the Application's bundle ID to look it up on the App Store. 56 | 57 | **Note:** If you have apps with matching bundle IDs on both the Mac and iOS App Stores (even if they use different capitalisation), the lookup mechanism won't work, so you'll need to set the appStoreID property, which is a numeric ID that can be found in iTunes Connect after you set up an app. This is only applicable to App Store apps. 58 | 59 | Alternatively (or additionally) you can specify an optional remotely hosted Plist file that will be used for the release notes instead of the ones on iTunes. Even if your app is on the store, there are a few advantages to providing your own release notes plist: 60 | 61 | 1. You can provide release notes for multiple versions, and if users skip a version they will see the release notes for all the updates they've missed. 62 | 63 | 2. You can provide more concise release notes, suitable for display on the iPhone screen. 64 | 65 | 3. You can delay the iVersion update alert until you are ready by not including an entry for the latest release until after the app has gone live. 66 | 67 | If you do wish to customise iVersion, the best time to do this is *before* the app has finished launching. The easiest way to do this is to add the iVersion configuration code in your AppDelegate's `initialize` method, like this: 68 | 69 | + (void)initialize 70 | { 71 | //example configuration 72 | [iVersion sharedInstance].appStoreID = 355313284; 73 | [iVersion sharedInstance].remoteVersionsPlistURL = @"http://example.com/versions.plist"; 74 | } 75 | 76 | The Plist file you specify will need to be hosted on a public-facing web server somewhere. You can optionally also add a Plist file to your app containing the release notes for the current version, and specify its path using the `localVersionsPlistPath` property. 77 | 78 | The format for both of these plists is as follows: 79 | 80 | 81 | 82 | 83 | 84 | 1.0 85 | First release 86 | 1.1 87 | NEW: Added new snoodlebar feature 88 | FIX: Fixed the bugalloo glitch 89 | ... 90 | 91 | 92 | 93 | The root node of the plist is a dictionary containing one or more items. Each item represents a particular version of your application. 94 | 95 | The key for each value must be a numerical version number consisting of one or more positive integers separated by decimal points. These should match the values you set for the applicationVersion property of iVersion, which by default is set to the Bundle Version (CFBundleShortVersionString or CFBundleVersion) key in your application's info.plist. 96 | 97 | Each value should be either a multi-line string or an array of strings, each representing a single bullet point in your release notes. There is no restriction to the format of each release note - the approach in the example above is just a suggestion. You can also omit the release notes if you want and just have an empty . 98 | 99 | 100 | Plist Tips 101 | -------------- 102 | 103 | It is not recommended that you include every single version of your app in the release notes. In practice, if a user updates so infrequently that they miss three or more consecutive versions, you still probably only want to show them the last couple of releases worth of notes, so delete older releases from the file when you update. 104 | 105 | Do not feel that the release notes have to exactly mirror those in iTunes or the Mac App Store. There is limited space in a modal alert and users won't want to read a lot of text whenever they launch your app, so it's probably best just to list the key new features in your versions plist. 106 | 107 | The local and remote release notes plists do not have to match. Whilst it may be convenient to make them identical from a maintenance point of view, the local version works better if it is written in a slightly different tone. For example the remote release notes might read: 108 | 109 | Version 1.1 110 | 111 | - Fixed crashing bug 112 | - Added shiny new menu graphics 113 | - New sound settings 114 | 115 | Whereas the local one might say: 116 | 117 | Check out the new sound options in the settings panel. You can access the settings from the home screen 118 | 119 | There's no point in mentioning the bug fix or new graphics because the user can see this easily enough just by using the app. On the other hand, they might not notice the new sound options, or know how to find them. 120 | 121 | Also don't always feel you have to include the local release notes file. If there are no features that need drawing attention to in the new release, just omit the file - it won't prevent you adding the remote versions file to prompt users to upgrade, and it won't prevent local release notes in future releases from working correctly. 122 | 123 | 124 | Configuration 125 | -------------- 126 | 127 | To configure iVersion, there are a number of properties of the iVersion class that can alter the behaviour and appearance of iVersion. These should be mostly self- explanatory, but they are documented below: 128 | 129 | @property (nonatomic, assign) NSUInteger appStoreID; 130 | 131 | This should match the iTunes app ID of your application, which you can get from iTunes connect after setting up your app. This value is not normally necessary and is generally only required if you have the aforementioned conflict between bundle IDs for your Mac and iOS apps. This feature is also only used for remote version updates, so you can ignore this if you do not intend to use that feature. 132 | 133 | @property (nonatomic, copy) NSString *remoteVersionsPlistURL; 134 | 135 | This is the URL of the remotely hosted plist that iVersion will check for release notes. You can safely update this file *before* your new release has been approved by Apple and appeared in the store. Set this value to nil if you want to just use the release notes on iTunes. Do not set it to an invalid URL such as http://example.com because this will waste battery, CPU and bandwidth as the app tries to check the invalid URL each time it launches. If you do not include a particular version in the plist, iVersion will not display an update alert for that version even if it detects a new version in the App Store, unless you set `useAppStoreDetailsIfNoPlistEntryFound` option to YES. 136 | 137 | @property (nonatomic, copy) NSString *localVersionsPlistPath; 138 | 139 | The file name of your local release notes plist used to tell users about new features when they first launch a new update. Set this value to nil if you do not want your app to display release notes for the current version. 140 | 141 | @property (nonatomic, copy) NSString *applicationVersion; 142 | 143 | The current version number of the app. This is set automatically from the CFBundleShortVersionString (if available) or CFBundleVersion string in the info.plist and it's probably not a good idea to change it unless you know what you are doing. Note that the version numbers on iTunes and in the remote versions Plist will be compared to this value, not the one in the info.plist. 144 | 145 | @property (nonatomic, copy) NSString *applicationBundleID; 146 | 147 | This is the application bundle ID, used to retrieve the latest version and release notes from iTunes. This is set automatically from the app's info.plist, so you shouldn't need to change it except for testing purposes. 148 | 149 | @property (nonatomic, copy) NSString *appStoreCountry; 150 | 151 | This is the two-letter country code used to specify which iTunes store to check. It is set automatically from the device locale preferences, so shouldn't need to be changed in most cases. You can override this to point to the US store, or another specific store if you prefer, which may be a good idea if your app is only available in certain countries, however be warned that this will affect the language used to display the release notes. 152 | 153 | @property (nonatomic, assign) BOOL showOnFirstLaunch; 154 | 155 | Specify whether the release notes for the current version should be shown the first time the user launches the app. If set to no it means that users who, for example, download version 1.1 of your app but never installed a previous version, won't be shown the new features in version 1.1. 156 | 157 | @property (nonatomic, assign) BOOL groupNotesByVersion; 158 | 159 | If your release notes files contains multiple versions, this option will group the release notes by their version number in the alert shown to the user. If set to NO, the release notes will be shown as a single list. Defaults to NO. 160 | 161 | @property (nonatomic, assign) float checkPeriod; 162 | 163 | Sets how frequently the app will check for new releases. This is measured in days but can be set to a fractional value, e.g. 0.5 for half a day. Set this to a higher value to avoid excessive traffic to your server. A value of zero means the app will check every time it's launched. As of iVersion 1.8, the default value is zero. 164 | 165 | @property (nonatomic, assign) float remindPeriod; 166 | 167 | How long the app should wait before reminding a user of a new version after they select the "remind me later" option. A value of zero means the app will remind the user every launch. Note that this value supersedes the check period, so once a reminder is set, the app won't check for new releases during the reminder period, even if new version are released in the meantime. The default remind period is one day. 168 | 169 | @property (nonatomic, copy) NSString *inThisVersionTitle; 170 | 171 | The title displayed for features in the current version (i.e. features in the local version s plist file). 172 | 173 | @property (nonatomic, copy) NSString *updateAvailableTitle; 174 | 175 | The title displayed when iVersion detects a new version of the app has appeared in the remote versions plist. The latest version number will automatically be appended to this title in brackets if `groupNotesByVersion` is set to NO. 176 | 177 | @property (nonatomic, copy) NSString *versionLabelFormat; 178 | 179 | The format string for the release notes version separators. This should include a %@ placeholder for the version number, e.g "Version %@". This label is not used unless `groupNotesByVersion` is set to YES. 180 | 181 | @property (nonatomic, copy) NSString *okButtonLabel; 182 | 183 | The button label for the button to dismiss the "new in this version" modal. 184 | 185 | @property (nonatomic, copy) NSString *ignoreButtonLabel; 186 | 187 | The button label for the button the user presses if they do not want to download a new update. 188 | 189 | @property (nonatomic, copy) NSString *remindButtonLabel; 190 | 191 | The button label for the button the user presses if they don't want to download a new update immediately, but do want to be reminded about it in future. Set this to `@""` if you don't want to display the remind me button - e.g. if you don't have space on screen. 192 | 193 | @property (nonatomic, copy) NSString *downloadButtonLabel; 194 | 195 | The button label for the button the user presses if they want to download a new update. 196 | 197 | @property (nonatomic, assign) iVersionUpdatePriority updatePriority; 198 | 199 | This is a simple way to hide the ignore/remind buttons if you want to prioritize the update. There are three priority levels: `iVersionUpdatePriorityLow` is the default, and shows download, remind and ignore buttons; `iVersionUpdatePriorityMedium` hides the ignore button; `iVersionUpdatePriorityHigh` hides both the remind and ignore buttons, forcing the user to download the update immediately. 200 | 201 | @property (nonatomic, assign) BOOL useAllAvailableLanguages; 202 | 203 | By default, iVersion will use all available languages in the iVersion.bundle, even if used in an app that does not support localisation. If you would prefer to restrict iVersion to only use the same set of languages that your application already supports, set this property to NO (YES by default). 204 | 205 | @property (nonatomic, assign) BOOL disableAlertViewResizing; 206 | 207 | On iPhone, iVersion includes some logic to resize the alert view to ensure that your release notes message doesn't become truncated in landscape mode. The code to do this is a rather nasty hack, so if your alert text is very short and/or your app only needs to function in portrait mode on iPhone, you may wish to set this property to YES, which may help make your app more robust against future iOS updates. Try the *Resizing Disabled* example for a demonstration of the effect. 208 | 209 | @property (nonatomic, assign) BOOL onlyPromptIfMainWindowIsAvailable; 210 | 211 | This setting is applicable to Mac OS only. By default, on Mac OS the iVersion alert is displayed as sheet on the main window. Some applications do not have a main window, so this approach doesn't work. For such applications, set this property to NO to allow the iVersion alert to be displayed as a regular modal window. 212 | 213 | @property (nonatomic, assign) BOOL useAppStoreDetailsIfNoPlistEntryFound; 214 | 215 | If you are using the remote plist option, by default iVersion will only display an update alert if a release notes entry is found in that plist, even if a new version is detected on the app store. This allows you to delay the announcement of an update, or block the announcement of minor updates by selectivley omitting versions from the plist. If you would prefer iVersion to use the App Store release notes if no plist entry is found, set this option to YES (NO by default). 216 | 217 | @property (nonatomic, assign) BOOL checkAtLaunch; 218 | 219 | Set this to NO to disable checking for local and remote release notes automatically when the app is launched or returns from the background. Disabling this option does not prevent you from manually triggering the checks by calling `checkIfNewVersion` and `checkForNewVersion` respectively. 220 | 221 | @property (nonatomic, assign) BOOL verboseLogging; 222 | 223 | This option will cause iVersion to send detailed logs to the console about the version checking process. If your app is not correctly detecting a new release, this will help you figure out why. Verbose logging is enabled by default on debug builds, and disabled on release and deployment builds. 224 | 225 | @property (nonatomic, assign) BOOL previewMode; 226 | 227 | If set to YES, iVersion will always display the contents of the local and remote versions plists, irrespective of the version number of the current build. Use this to proofread your release notes during testing, but disable it for the final release. 228 | 229 | @property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable; 230 | 231 | By default, iVersion will use UIAlertView on iOS to display the rating prompt. UIAlertView was deprecated in iOS8 and replaced by UIAlertController. Unfortunately, unlike UIAlertView, presenting an alert with UIAlertController interferes with the ability of the app to display other controllers, and since iVersion could theoretically display an alert at any point during the app's lifetime, it might clash with the app attempting to present another view controller. For this reason, use of UIAlertController is disabled by default. You should only set this property to YES if you are certain that it won't clash with your app logic (e.g, if you have disabled automatic version prompts, or if your app doesn't use any modal view controllers). 232 | 233 | 234 | Advanced properties 235 | --------------- 236 | 237 | If the default iVersion behaviour doesn't meet your requirements, you can implement your own by using the advanced properties, methods and delegate. The properties below let you access internal state and override it: 238 | 239 | @property (nonatomic, strong) NSURL *updateURL; 240 | 241 | The URL that the app will direct the user to if an update is detected and they choose to download it. You will need to override this for in-house apps or apps that are not distributed via the App Store. If you are implementing your own download button for a regular app-store-app, you should use the openAppPageInAppStore method instead of opening this URL, especially on Mac OS, as the process for opening the Mac App Store is more complex than merely opening the URL. 242 | 243 | @property (nonatomic, copy) NSString *ignoredVersion; 244 | 245 | The version string of the last app version that the user ignored. If the user hasn't ignored any releases, this will be nil. Set this to nil to clear the ignored version. 246 | 247 | @property (nonatomic, strong) NSDate *lastChecked; 248 | 249 | The last date on which iVersion checked for an update. You can use this in combination with the checkPeriod to determine if the app should check again. 250 | 251 | @property (nonatomic, strong) NSDate *lastReminded; 252 | 253 | The last date on which the user was reminded of a new version. You can use this in combination with the remindPeriod to determine if the app should check again. Set this to nil to clear the reminder delay. 254 | 255 | @property (nonatomic, assign) BOOL viewedVersionDetails; 256 | 257 | Flag that indicates if the local version details have been viewed (YES) or not (NO). 258 | 259 | @property (nonatomic, assign) id delegate; 260 | 261 | An object you have supplied that implements the iVersionDelegate protocol, documented below. Use this to detect and/or override iVersion's default behaviour. This defaults to the App Delegate, so if you are using your App Delegate as your iVersion delegate, you don't need to set this property. 262 | 263 | 264 | Advanced methods 265 | --------------- 266 | 267 | - (void)openAppPageInAppStore; 268 | 269 | This method will open the application page in the Mac or iPhone App Store, or directly within the app, depending on which platform and OS version is running. You should use this method instead of the updateURL property, as the process for launching the app store is more complex than merely opening the URL in many cases. Note that this method depends on the `appStoreID` which is only retrieved after polling the iTunes server, and will return NO if that property is not yet set. If you intend to call this method without first doing an update check, you will need to set the `appStoreID` property yourself beforehand. 270 | 271 | - (void)checkIfNewVersion; 272 | 273 | This method will check the local versions Plist to see if there are new notes to be displayed, and will display them in an alert. This method is called automatically on launch if `checkAtLaunch` is set to YES. 274 | 275 | - (NSString *)versionDetails; 276 | 277 | This returns the local release notes for the current version, or any versions that have been released since the last time the app was launched, depending on how many versions are included in the local version plist file. If this isn't the first time this version of the app was launched, only the most recent version is included. 278 | 279 | - (BOOL)shouldCheckForNewVersion; 280 | 281 | This method checks to see if the criteria for checking for a new version have been met. You can use this to decide whether to check for version updates if you have disabled the automatic display at app launch. 282 | 283 | - (void)checkForNewVersion; 284 | 285 | This method will trigger a new check for new versions, ignoring the checkPeriod and remindPeriod properties. This method is called automatically on launch and when the app returns from background if `checkAtLaunch` is set to YES and `shouldCheckForNewVersion` returns YES. 286 | 287 | 288 | Delegate methods 289 | --------------- 290 | 291 | The iVersionDelegate protocol provides the following methods that can be used to intercept iVersion events and override the default behaviour. All methods are optional. 292 | 293 | - (BOOL)iVersionShouldCheckForNewVersion; 294 | 295 | This is called if the checking criteria have all been met and iVersion is about to check for a new version. If you return NO, the check will not be performed. This method is not called if you trigger the check manually with the checkForNewVersion method. 296 | 297 | - (void)iVersionDidNotDetectNewVersion; 298 | 299 | This is called if the version check did not detect any new versions of the application. 300 | 301 | - (void)iVersionVersionCheckDidFailWithError:(NSError *)error; 302 | 303 | This is called if the version check failed due to network issues or because the remote versions Plist file was missing or corrupt. 304 | 305 | - (void)iVersionDidDetectNewVersion:(NSString *)version details:(NSString *)versionDetails; 306 | 307 | This is called if a new version was detected. 308 | 309 | - (BOOL)iVersionShouldDisplayNewVersion:(NSString *)version details:(NSString *)versionDetails; 310 | 311 | This is called immediately before the new (remote) version details alert is displayed. Return NO to prevent the alert from being displayed. Note that if you are implementing the alert yourself you will also need to set the `lastChecked`, `lastReminded` and `ignoredVersion` properties yourself, depending on the user response. 312 | 313 | - (BOOL)iVersionShouldDisplayCurrentVersionDetails:(NSString *)versionDetails; 314 | 315 | This is called immediately before the current (local) version details alert is displayed. Return NO to prevent the alert from being displayed. Note that if you intend to implement this notification yourself, you will need to set the viewedVersionDetails flag manually. 316 | 317 | - (void)iVersionUserDidAttemptToDownloadUpdate:(NSString *)version; 318 | 319 | This is called when the user pressed the download button in the new version alert. This is useful if you want to log user interaction with iVersion. This method is only called if you are using the standard iVersion alert view and will not be called automatically if you provide a custom alert implementation or call the `openAppPageInAppStore` method directly. 320 | 321 | - (void)iVersionUserDidRequestReminderForUpdate:(NSString *)version; 322 | 323 | This is called when the user asks to be reminded about a new version. This is useful if you want to log user interaction with iVersion. This method is only called if you are using the standard iVersion alert view and will not be called automatically if you provide a custom alert implementation. 324 | 325 | - (void)iVersionUserDidIgnoreUpdate:(NSString *)version; 326 | 327 | This is called when the user presses the ignore in the new version alert. This is useful if you want to log user interaction with iVersion. This method is only called if you are using the standard iVersion alert view and will not be called automatically if you provide a custom alert implementation. 328 | 329 | - (BOOL)iVersionShouldOpenAppStore; 330 | 331 | This method is called immediately before iVersion attempts to open the App Store, either via a URL or using the StoreKit in-app product view controller. Return NO if you wish to implement your own update page logic. 332 | 333 | - (void)iVersionDidPresentStoreKitModal; 334 | 335 | This method is called just after iVersion presents the StoreKit in-app product view controller. It is useful if you want to pause certain functionality in your app, etc. 336 | 337 | - (void)iVersionDidDismissStoreKitModal; 338 | 339 | This method is called when the user dismisses the StoreKit in-app product view controller. This is useful if you want to resume any functionality that you paused when the modal was displayed. 340 | 341 | 342 | StoreKit support 343 | ------------------ 344 | 345 | By default, iVersion will open the ratings page by launching the App Store app. Optionally, on iOS 6 or above you can set iVersion to display the app page without leaving the app by using the StoreKit framework. To enable this feature, set the following macro value in your prefix.pch file: 346 | 347 | #define IVERSION_USE_STOREKIT 1 348 | 349 | Or, alternatively, you can add `IVERSION_USE_STOREKIT=1` as a preprocessor macro. Note the following caveats to using Storekit: 350 | 351 | 1. iVersion cannot open the ratings page directly in StoreKit, it can only open the app details page. The user will have to tap the ratings tab before rating. 352 | 353 | 2. There have been some isolated cases of Apple rejecting apps that link against the StoreKit framework but do not offer in-app purchases. If your app does not already use StoreKit, enabling this feature of iVersion is at your own risk. 354 | 355 | 356 | Localisation 357 | --------------- 358 | 359 | The defaults strings for iVersion are already localised for many languages. By default, iVersion will use all the localisations in the iVersion.bundle even in an app that is not localised, or which is only localised to a subset of the languages that iVersion supports. 360 | 361 | If you would prefer iVersion to only use the localisations that are enabled in your application (so that if your app only supports English, French and Spanish, iVersion will automatically be localised for those languages, but not for German, even though iVersion includes a German language file), set the `useAllAvailableLanguages` option to NO. 362 | 363 | iVersion will automatically use the localised release notes that you've specified on iTunes, if available. 364 | 365 | It is not recommended that you modify the strings files in the iVersion.bundle, as it will complicate updating to newer versions of iVersion. The exception to this is if you would like to submit additional languages or improvements or corrections to the localisations in the iVersion project on github (which are greatly appreciated). 366 | 367 | If you want to add an additional language for iVersion in your app without submitting them back to the github project, you can add these strings directly to the appropriate Localizable.strings file in your project folder. If you wish to replace some or all of the default iVersion strings, the simplest option is to copy just those strings into your own Localizable.strings file and then modify them. iVersion will automatically use strings in the main application bundle in preference to the ones in the iVersion bundle so you can override any string in this way. 368 | 369 | If you do not want to use *any* of the default localisations, you can omit the iVersion.bundle altogether. Note that if you only want to support a subset of languages that iVersion supports, it is not neccesary to delete the other strings files from iVersion.bundle - just set `useAllAvailableLanguages` to NO, and iVersion will only use the languages that your app already supports. 370 | 371 | The old method of overriding iVersion's default strings by using individual setter methods (see below) is still supported, however the recommended approach is now to add those strings to your project's Localizable.strings file, which will be detected automatically by iVersion. 372 | 373 | + (void)initialize 374 | { 375 | [iVersion sharedInstance].inThisVersionTitle = NSLocalizedString(@"New in this version", @"iVersion local version alert title"); 376 | [iVersion sharedInstance].updateAvailableTitle = NSLocalizedString(@"A new version of MyApp is available to download", @"iVersion new version alert title"); 377 | [iVersion sharedInstance].versionLabelFormat = NSLocalizedString(@"Version %@", @"iVersion version label format"); 378 | [iVersion sharedInstance].okButtonLabel = NSLocalizedString(@"OK", @"iVersion OK button"); 379 | [iVersion sharedInstance].ignoreButtonLabel = NSLocalizedString(@"Ignore", @"iVersion ignore button"); 380 | [iVersion sharedInstance].remindButtonLabel = NSLocalizedString(@"Remind Me Later", @"iVersion remind button"); 381 | [iVersion sharedInstance].downloadButtonLabel = NSLocalizedString(@"Download", @"iVersion download button"); 382 | } 383 | 384 | If you are using the remote versions Plist, and you need to provide localised release notes, the simplest way to do this is to localise the `remoteVersionsPlistURL` file and provide a different URL for each language, like this: 385 | 386 | + (void)initialize 387 | { 388 | [iVersion sharedInstance].remoteVersionsPlistURL = NSLocalizedString(@"http://example.com/versions_en.plist", @"remote iVersion plist URL"); 389 | } 390 | 391 | Example Projects 392 | --------------- 393 | 394 | When you build and run the basic Mac or iPhone example project for the first time, it will show an alert saying that a new version is available. This is because it has downloaded the remote versions.plist file and determined that the latest version is newer than the currently running app. 395 | 396 | Quit the app, go into the iVersion-Info.plist file and edit the bundle version to 1.2. Now rebuild the app. 397 | 398 | This time it will not say that a new version is available. In effect, you have simulated an upgrade. Instead it will tell you about the new features in your currently installed version. This is because it has found that the bundle version of the current app is newer than the last recorded version that was launched, and has checked the local versions.plist file for a release notes entry for the new version. 399 | 400 | 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. 401 | 402 | To show the alerts again, delete the app from the simulator and reset the bundle version to 1.1. Alternatively, enable the `previewMode` option to force the alerts to appear on launch. 403 | 404 | 405 | Advanced Example 406 | --------------- 407 | 408 | The advanced example demonstrates how you might implement a completely bespoke iVersion interface. Automatic version checking is disabled and instead the user can trigger a check by pressing the "Check for new version" button. 409 | 410 | When pressed, the app display a progress wheel and then prints the result in a console underneath the button. 411 | 412 | The example is for Mac OS, but the same thing can be applied on iOS. 413 | 414 | 415 | Release Notes 416 | ---------------- 417 | 418 | Version 1.11.5 419 | 420 | - Updated for iOS 10 and Xcode 8 421 | - Fixed App Transport Security (ATS) issues 422 | - Fix for language files when using CocoaPods 423 | - Fix for Gibraltar App Store link 424 | - Added Traditional Chinese localization 425 | - Added Taiwanese localization 426 | - Added Czech localization 427 | - Added British English localization 428 | - Improved Japanese localization 429 | - Release notes field is no longer editable on macOS 430 | 431 | Version 1.11.4 432 | 433 | - Added useUIAlertControllerIfAvailable option 434 | - Disabled UIAlertController by default as it may interfere with in-app controller logic 435 | 436 | Version 1.11.3 437 | 438 | - Fixed critical bug in alert button handling on iOS 439 | - iVersion will now use UIAlertController on iOS 8+ 440 | 441 | Version 1.11.2 442 | 443 | - Fixed compiler error when building for Mac OS X 10.10 444 | - Fixed some additional warnings 445 | 446 | Version 1.11.1 447 | 448 | - Added check for minimum supported iOS version, to prevent notifications for updates that device cannot install 449 | 450 | Version 1.11 451 | 452 | - Added `updatePriority` property for configuring update priority 453 | - Fixed bug where setting ignoreLabel and remindLabel to blank would cause wrong behavior 454 | - Fixed problem with fetching app ID when device region is set to Europe 455 | - No longer requires StoreKit by default (see README for details) 456 | - Removed disableAlertViewResizing property (no longer needed) 457 | - Added Turkish translation 458 | - Improved handling of HTTP request errors 459 | - Now complies with the -Weverything warning level 460 | - Removed deprecated methods on Mac OS 461 | 462 | Version 1.10.6 463 | 464 | - Fixed crash when plist contains versions later than latest in app store 465 | 466 | Version 1.10.5 467 | 468 | - Fixed critical bug in NSJSONSerializer implementation 469 | 470 | Version 1.10.4 471 | 472 | - Added Portuguese and Russian translations 473 | - Now uses NSJSONSerializer if available, which solves problem with app store descriptions containing double quotes (iOS 4.x will still use the old parser) 474 | 475 | Version 1.10.3 476 | 477 | - Fixed potential infinite loop if release notes JSON contains 0x00 characters 478 | - On Mac OS, release notes are now displayed in a scrolling text field (thanks to Daij-Djan for the suggestion). 479 | 480 | Version 1.10.2 481 | 482 | - Fixed issues where alert would not appear, even with preview mode enabled, if app has already been released but has no release notes 483 | - Addressed possible issue on iOS 5.0.x where app store link does not work (unconfirmed). 484 | - StoreKit framework is no longer included on Mac OS 485 | - Added podspec 486 | 487 | Version 1.10.1 488 | 489 | - Fixed bug where iVersion would potentially display release notes for unreleased versions in the remote version plist if the user's version is not up to date with the latest version in the App Store 490 | - Fixed deprecation warning when targeting iOS 6 and above 491 | - iVersion now displays the StoreKit product view controller correctly even if a modally presented view controller has been displayed 492 | - Added iVersionDidPresentStoreKitModal and iVersionDidDismissStoreKitModal delegate methods 493 | - Added useAppStoreDetailsIfNoPlistEntryFound option 494 | - Added Danish translation 495 | 496 | Version 1.10 497 | 498 | - Added new localisation system (see README for details) 499 | - On iOS 6, iVersion can now use the StoreKit APIs to display the product page directly within the app. 500 | - iVersion now requires the StoreKit framework on iOS 501 | - iVersion now requires ARC. To use iVersion in a non-ARC project, follow the instructions in the README file. 502 | - Dropped support for 32-bit Macs running Snow Leopard 503 | - Fixed deprecation warning in iOS 6 504 | 505 | Version 1.9.8 506 | 507 | - Added verboseLogging option to make it easier to diagnose why a new version isn't being correctly detected 508 | - Renamed debug property to previewMode as this better describes its function 509 | - Fixed a bug where certain types of download error were not correctly passed to the delegate 510 | 511 | Version 1.9.7 512 | 513 | - Fixed crash on iOS 4.x and Mac OS 10.6.x when compiled using Xcode 4.4 514 | 515 | Version 1.9.6 516 | 517 | - Added support for iOS6. Currently it does not appear to be possible to link users directly to the release notes page on iOS6, but iVersion will now at least open the app store on the app page without an error. 518 | - iVersion now displays correctly localised release notes 519 | - Removed appStoreLanguage property, as this is no longer used 520 | 521 | Version 1.9.5 522 | 523 | - Fixed cache policy so that version data is no longer cached between requests while app is running 524 | - Fixed typo in German translation 525 | 526 | Version 1.9.4 527 | 528 | - Now links users directly to update page on app store on iOS 529 | - Fixed a bug where advanced properties set in the delegate methods might be subsequently overridden by iVersion 530 | - Added disableAlertViewResizing option (see README for details) 531 | - Added Resizing Disabled example project 532 | - Added explicit 60-second timeout for remote version checks 533 | - iVersion will now no longer spawn multiple download threads if closed and re-opened whilst performing a check 534 | - Added Simplified Chinese translation 535 | 536 | Version 1.9.3 537 | 538 | - It is now possible again to use iVersion with apps that are not on the iOS or Mac app store using just the remoteVersionsPlist 539 | - It is now possible again to test release notes using debug mode 540 | 541 | Version 1.9.2 542 | 543 | - Added logic to prevent UIAlertView collapsing in landscape mode 544 | - Shortened default updateAvailableTitle to better fit the alert 545 | - Removed applicationName configuration property as it is no longer used 546 | - Fixed bug in Italian localised updateAvailableTitle text 547 | - groupNotesByVersion now defaults to NO 548 | 549 | Version 1.9.1 550 | 551 | - Fixed bug where release notes containing commas would not be displayed 552 | - Release notes containing unicode literals are now handled correctly 553 | - Now uses localeIdentifier for language parameter to match iTunes format 554 | 555 | Version 1.9 556 | 557 | - Included localisation for French, German, Italian, Spanish and Japanese 558 | - iVersion delegate now defaults to App Delegate unless otherwise specified 559 | - Now checks the correct country's iTunes store based on the user locale settings 560 | 561 | Version 1.8 562 | 563 | - iVersion is now *completely zero-config* in most cases! 564 | - iVersion can automatically detect app updates using official iTunes App Store search APIs based on your application bundle ID 565 | - It is no longer necessary to set the app store ID in most cases 566 | - Changed default checkPeriod to 0.0 so version check happens every launch 567 | - Removed PHP web service as it is no longer needed 568 | 569 | Version 1.7.3 570 | 571 | - Added missing iVersionDidNotDetectNewVersion delegate method 572 | - Added logic to prevent multiple prompts from being displayed if user fails to close one prompt before the next is due to be opened 573 | - Added workaround for change in UIApplicationWillEnterForegroundNotification implementation in iOS5 574 | 575 | Version 1.7.2 576 | 577 | - Added automatic support for ARC compile targets 578 | - Now requires Apple LLVM 3.0 compiler target 579 | 580 | Version 1.7.1 581 | 582 | - Now uses CFBundleShortVersionString when available instead of CFBundleVersion for the application version 583 | - Fixed bug in iversion.php web service where platform was not set correctly 584 | - Added logic to web service to use curl when available instead of file_get_contents for reading in iTunes search service data 585 | 586 | Version 1.7 587 | 588 | - Added additional delegate methods to facilitate logging 589 | - Renamed some delegate methods 590 | - Removed localChecksDisabled property and renamed remoteChecksDisabled property to checkAtLaunch for clarity and consistency with the iRate and iNotify libraries 591 | - Combined remoteDebug and localDebug to simplify usage 592 | - Added checkIfNewVersion method to manually trigger display of local version details 593 | 594 | Version 1.6.4 595 | 596 | - Updated iVersion web service to use official iTunes App Store search APIs 597 | - iVersion now uses CFBundleDisplayName for the application name (if available) 598 | - Increased Mac app store refresh delay for older Macs 599 | - Simplified version comparison logic 600 | - Reorganised examples 601 | 602 | Version 1.6.3 603 | 604 | - Fixed web service and updated project for Xcode 4.2 605 | 606 | Version 1.6.2 607 | 608 | - Fixed version details in new version alert on iOS 609 | 610 | Version 1.6.1 611 | 612 | - Fixed crash on iOS versions before 4.0 when downloading version details. 613 | 614 | Version 1.6 615 | 616 | - Added openAppPageInAppStore method for more reliably opening Mac App Store 617 | - Fixed issue with local versions plist path on Mac OS 618 | - Renamed a couple of configuration settings names to comply with Cocoa conventions and prevent static analyzer warnings 619 | - Added explicit ivars to support i386 (32bit x86) targets 620 | 621 | Version 1.5 622 | 623 | - Added PHP web service example for automatically scraping version from iTunes 624 | - Added delegate and additional accessor properties for custom behaviour 625 | - Added advanced example project to demonstrate use of the delegate protocol 626 | 627 | Version 1.4 628 | 629 | - Now compatible with iOS 3.x 630 | - Local versions plist path can now be nested within a subfolder of Resources 631 | 632 | Version 1.3 633 | 634 | - Added Mac demo project 635 | - Changed Mac App Store opening mechanism to no longer launch browser first 636 | - Corrected error in documentation 637 | 638 | Version 1.2 639 | 640 | - Configuration no longer involves modifying iVersion.h file 641 | - Now detects application launch and app switching events automatically 642 | - No longer requires release notes to be included in update notifications 643 | - Simpler to localise 644 | 645 | Version 1.1 646 | 647 | - Added optional remind me button 648 | - Added ability to specify update period 649 | - Local versions file path can now be set to nil 650 | 651 | Version 1.0 652 | 653 | - Initial release 654 | -------------------------------------------------------------------------------- /iVersion.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "iVersion", 3 | "version": "1.11.5", 4 | "license": { 5 | "type": "zlib", 6 | "file": "LICENCE.md" 7 | }, 8 | "summary": "Library for checking for updates to Mac/iPhone App Store apps from within the application and notifying users about the new release.", 9 | "homepage": "https://github.com/nicklockwood/iVersion", 10 | "authors": { 11 | "Nick Lockwood": "support@charcoaldesign.co.uk" 12 | }, 13 | "source": { 14 | "git": "https://github.com/nicklockwood/iVersion.git", 15 | "tag": "1.11.5" 16 | }, 17 | "source_files": "iVersion/iVersion.{h,m}", 18 | "requires_arc": true, 19 | "platforms": { 20 | "ios": "4.3", 21 | "osx": "10.6" 22 | }, 23 | "ios": { 24 | "frameworks": "StoreKit" 25 | }, 26 | "resources": "iVersion/iVersion.bundle" 27 | } -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/cs.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/cs.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/da.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "iVersionInThisVersionTitle" = "Nyheder i denne version"; 2 | "iVersionUpdateAvailableTitle" = "Ny version tilgængelig"; 3 | "iVersionVersionLabelFormat" = "Version %@"; 4 | "iVersionIgnoreButton" = "Ignorér"; 5 | "iVersionDownloadButton" = "Hent"; 6 | "iVersionRemindButton" = "Påmind mig senere"; 7 | "iVersionOKButton" = "OK"; -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/de.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/el.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/el.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/en-GB.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/en-GB.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/es.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/es.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/fr.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/fr.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/it.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/it.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/ja.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/pt-PT.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/pt-PT.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/pt.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/pt.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/ru.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/tr.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/tr.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/zh-Hans.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/zh-Hant.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/zh-Hant.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.bundle/zh-TW.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicklockwood/iVersion/0e77912981144dfff5d926a1522dd2a7e84e4d91/iVersion/iVersion.bundle/zh-TW.lproj/Localizable.strings -------------------------------------------------------------------------------- /iVersion/iVersion.h: -------------------------------------------------------------------------------- 1 | // 2 | // iVersion.h 3 | // 4 | // Version 1.11.5 5 | // 6 | // Created by Nick Lockwood on 26/01/2011. 7 | // Copyright 2011 Charcoal Design 8 | // 9 | // Distributed under the permissive zlib license 10 | // Get the latest version from here: 11 | // 12 | // https://github.com/nicklockwood/iVersion 13 | // 14 | // This software is provided 'as-is', without any express or implied 15 | // warranty. In no event will the authors be held liable for any damages 16 | // arising from the use of this software. 17 | // 18 | // Permission is granted to anyone to use this software for any purpose, 19 | // including commercial applications, and to alter it and redistribute it 20 | // freely, subject to the following restrictions: 21 | // 22 | // 1. The origin of this software must not be misrepresented; you must not 23 | // claim that you wrote the original software. If you use this software 24 | // in a product, an acknowledgment in the product documentation would be 25 | // appreciated but is not required. 26 | // 27 | // 2. Altered source versions must be plainly marked as such, and must not be 28 | // misrepresented as being the original software. 29 | // 30 | // 3. This notice may not be removed or altered from any source distribution. 31 | // 32 | 33 | 34 | #pragma clang diagnostic push 35 | #pragma clang diagnostic ignored "-Wobjc-missing-property-synthesis" 36 | 37 | 38 | #import 39 | #undef weak_delegate 40 | #if __has_feature(objc_arc_weak) && \ 41 | (TARGET_OS_IPHONE || __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_8) 42 | #define weak_delegate weak 43 | #else 44 | #define weak_delegate unsafe_unretained 45 | #endif 46 | 47 | 48 | #import 49 | #if TARGET_OS_IPHONE 50 | #import 51 | #define IVERSION_EXTERN UIKIT_EXTERN 52 | #else 53 | #import 54 | #define IVERSION_EXTERN APPKIT_EXTERN 55 | #endif 56 | 57 | 58 | #if defined(IVERSION_USE_STOREKIT) && IVERSION_USE_STOREKIT 59 | #import 60 | #endif 61 | 62 | 63 | extern NSString *const iVersionErrorDomain; 64 | 65 | //localisation string keys 66 | IVERSION_EXTERN NSString *const iVersionInThisVersionTitleKey; //iVersionInThisVersionTitle 67 | IVERSION_EXTERN NSString *const iVersionUpdateAvailableTitleKey; //iVersionUpdateAvailableTitle 68 | IVERSION_EXTERN NSString *const iVersionVersionLabelFormatKey; //iVersionVersionLabelFormat 69 | IVERSION_EXTERN NSString *const iVersionOKButtonKey; //iVersionOKButton 70 | IVERSION_EXTERN NSString *const iVersionIgnoreButtonKey; //iVersionIgnoreButton 71 | IVERSION_EXTERN NSString *const iVersionRemindButtonKey; //iVersionRemindButton 72 | IVERSION_EXTERN NSString *const iVersionDownloadButtonKey; //iVersionDownloadButton 73 | 74 | 75 | typedef NS_ENUM(NSUInteger, iVersionErrorCode) 76 | { 77 | iVersionErrorBundleIdDoesNotMatchAppStore = 1, 78 | iVersionErrorApplicationNotFoundOnAppStore, 79 | iVersionErrorOSVersionNotSupported 80 | }; 81 | 82 | 83 | typedef NS_ENUM(NSInteger, iVersionUpdatePriority) 84 | { 85 | iVersionUpdatePriorityDefault = 0, 86 | iVersionUpdatePriorityLow = 1, 87 | iVersionUpdatePriorityMedium = 2, 88 | iVersionUpdatePriorityHigh = 3 89 | }; 90 | 91 | 92 | @interface NSString(iVersion) 93 | 94 | - (NSComparisonResult)compareVersion:(NSString *)version; 95 | - (NSComparisonResult)compareVersionDescending:(NSString *)version; 96 | 97 | @end 98 | 99 | 100 | @protocol iVersionDelegate 101 | @optional 102 | 103 | - (BOOL)iVersionShouldCheckForNewVersion; 104 | - (void)iVersionDidNotDetectNewVersion; 105 | - (void)iVersionVersionCheckDidFailWithError:(NSError *)error; 106 | - (void)iVersionDidDetectNewVersion:(NSString *)version details:(NSString *)versionDetails; 107 | - (BOOL)iVersionShouldDisplayNewVersion:(NSString *)version details:(NSString *)versionDetails; 108 | - (BOOL)iVersionShouldDisplayCurrentVersionDetails:(NSString *)versionDetails; 109 | - (void)iVersionUserDidAttemptToDownloadUpdate:(NSString *)version; 110 | - (void)iVersionUserDidRequestReminderForUpdate:(NSString *)version; 111 | - (void)iVersionUserDidIgnoreUpdate:(NSString *)version; 112 | - (BOOL)iVersionShouldOpenAppStore; 113 | - (void)iVersionDidPresentStoreKitModal; 114 | - (void)iVersionDidDismissStoreKitModal; 115 | 116 | @end 117 | 118 | 119 | @interface iVersion : NSObject 120 | 121 | + (iVersion *)sharedInstance; 122 | 123 | //app store ID - this is only needed if your 124 | //bundle ID is not unique between iOS and Mac app stores 125 | @property (nonatomic, assign) NSUInteger appStoreID; 126 | 127 | //application details - these are set automatically 128 | @property (nonatomic, copy) NSString *applicationVersion; 129 | @property (nonatomic, copy) NSString *applicationBundleID; 130 | @property (nonatomic, copy) NSString *appStoreCountry; 131 | 132 | //usage settings - these have sensible defaults 133 | @property (nonatomic, assign) BOOL showOnFirstLaunch; 134 | @property (nonatomic, assign) BOOL groupNotesByVersion; 135 | @property (nonatomic, assign) float checkPeriod; 136 | @property (nonatomic, assign) float remindPeriod; 137 | 138 | //message text - you may wish to customise these 139 | @property (nonatomic, copy) NSString *inThisVersionTitle; 140 | @property (nonatomic, copy) NSString *updateAvailableTitle; 141 | @property (nonatomic, copy) NSString *versionLabelFormat; 142 | @property (nonatomic, copy) NSString *okButtonLabel; 143 | @property (nonatomic, copy) NSString *ignoreButtonLabel; 144 | @property (nonatomic, copy) NSString *remindButtonLabel; 145 | @property (nonatomic, copy) NSString *downloadButtonLabel; 146 | 147 | //debugging and prompt overrides 148 | @property (nonatomic, assign) iVersionUpdatePriority updatePriority; 149 | @property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable; 150 | @property (nonatomic, assign) BOOL useAllAvailableLanguages; 151 | @property (nonatomic, assign) BOOL onlyPromptIfMainWindowIsAvailable; 152 | @property (nonatomic, assign) BOOL useAppStoreDetailsIfNoPlistEntryFound; 153 | @property (nonatomic, assign) BOOL checkAtLaunch; 154 | @property (nonatomic, assign) BOOL verboseLogging; 155 | @property (nonatomic, assign) BOOL previewMode; 156 | 157 | //advanced properties for implementing custom behaviour 158 | @property (nonatomic, copy) NSString *remoteVersionsPlistURL; 159 | @property (nonatomic, copy) NSString *localVersionsPlistPath; 160 | @property (nonatomic, copy) NSString *ignoredVersion; 161 | @property (nonatomic, strong) NSDate *lastChecked; 162 | @property (nonatomic, strong) NSDate *lastReminded; 163 | @property (nonatomic, strong) NSURL *updateURL; 164 | @property (nonatomic, assign) BOOL viewedVersionDetails; 165 | @property (nonatomic, weak_delegate) id delegate; 166 | 167 | //manually control behaviour 168 | - (BOOL)openAppPageInAppStore; 169 | - (void)checkIfNewVersion; 170 | - (NSString *)versionDetails; 171 | - (BOOL)shouldCheckForNewVersion; 172 | - (void)checkForNewVersion; 173 | 174 | @end 175 | 176 | 177 | #pragma clang diagnostic pop 178 | 179 | --------------------------------------------------------------------------------