Repository: zenangst/Versions Branch: master Commit: 99e0b66e68f9 Files: 28 Total size: 76.7 KB Directory structure: gitextract_muopvkbp/ ├── .gitignore ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── Versions/ │ ├── Info.plist │ ├── StaticVersion.swift │ ├── Versions.h │ └── Versions.swift ├── Versions.podspec ├── Versions.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata/ │ └── xcschemes/ │ ├── Versions-OSX.xcscheme │ ├── Versions-iOS.xcscheme │ ├── VersionsDemo.xcscheme │ └── VersionsDemoTests.xcscheme ├── VersionsDemo/ │ ├── AppDelegate.swift │ ├── Base.lproj/ │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets/ │ │ └── AppIcon.appiconset/ │ │ └── Contents.json │ ├── Info.plist │ ├── VersionsDemo.xcdatamodeld/ │ │ ├── .xccurrentversion │ │ └── VersionsDemo.xcdatamodel/ │ │ └── contents │ └── ViewController.swift └── VersionsDemoTests/ ├── Info.plist ├── StaticVersion_Test.swift ├── VersionsDemoTests.swift └── Versions_Tests.swift ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # OS X .DS_Store ### Objective-C ### # Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata *.xccheckout *.moved-aside DerivedData *.hmap *.ipa *.xcuserstate # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control # # Note: if you ignore the Pods directory, make sure to uncomment # `pod install` in .travis.yml # Pods/ ================================================ FILE: CHANGELOG.md ================================================ # Change Log ## [0.5.0](https://github.com/zenangst/Versions/tree/0.5.0) (2016-04-26) [Full Changelog](https://github.com/zenangst/Versions/compare/0.4.0...0.5.0) **Merged pull requests:** - Updated to swift 2.2 [\#17](https://github.com/zenangst/Versions/pull/17) ([acecilia](https://github.com/acecilia)) ## [0.4.0](https://github.com/zenangst/Versions/tree/0.4.0) (2015-12-21) [Full Changelog](https://github.com/zenangst/Versions/compare/0.3.0...0.4.0) **Merged pull requests:** - Add CocoaPod section for README.md [\#15](https://github.com/zenangst/Versions/pull/15) ([joshjiav5](https://github.com/joshjiav5)) - Update podspec version [\#14](https://github.com/zenangst/Versions/pull/14) ([joshjiav5](https://github.com/joshjiav5)) - Dynamic Frameworks for iOS / OS X and Carthage Supports [\#13](https://github.com/zenangst/Versions/pull/13) ([remaerd](https://github.com/remaerd)) ## [0.3.0](https://github.com/zenangst/Versions/tree/0.3.0) (2015-05-20) [Full Changelog](https://github.com/zenangst/Versions/compare/0.2.1...0.3.0) **Closed issues:** - I want to be able to get App version [\#11](https://github.com/zenangst/Versions/issues/11) - Swift space style [\#7](https://github.com/zenangst/Versions/issues/7) **Merged pull requests:** - Feature/App-Version [\#12](https://github.com/zenangst/Versions/pull/12) ([zenangst](https://github.com/zenangst)) - Change from 4 spaces to 2 spaces [\#9](https://github.com/zenangst/Versions/pull/9) ([zenangst](https://github.com/zenangst)) - Feature/super power [\#8](https://github.com/zenangst/Versions/pull/8) ([kostiakoval](https://github.com/kostiakoval)) ## [0.2.1](https://github.com/zenangst/Versions/tree/0.2.1) (2015-03-06) [Full Changelog](https://github.com/zenangst/Versions/compare/0.2...0.2.1) **Merged pull requests:** - Feature/change detection [\#4](https://github.com/zenangst/Versions/pull/4) ([kostiakoval](https://github.com/kostiakoval)) - Improve/semantic compare [\#3](https://github.com/zenangst/Versions/pull/3) ([zenangst](https://github.com/zenangst)) - Switch [\#2](https://github.com/zenangst/Versions/pull/2) ([kostiakoval](https://github.com/kostiakoval)) ## [0.2](https://github.com/zenangst/Versions/tree/0.2) (2015-03-05) [Full Changelog](https://github.com/zenangst/Versions/compare/0.1...0.2) **Merged pull requests:** - Feature/semantic compare [\#1](https://github.com/zenangst/Versions/pull/1) ([zenangst](https://github.com/zenangst)) ## [0.1](https://github.com/zenangst/Versions/tree/0.1) (2015-03-02) \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* ================================================ FILE: LICENSE.md ================================================ Licensed under the **MIT** license > Copyright (c) 2015 Christoffer Winterkvist > > Permission is hereby granted, free of charge, to any person obtaining > a copy of this software and associated documentation files (the > "Software"), to deal in the Software without restriction, including > without limitation the rights to use, copy, modify, merge, publish, > distribute, sublicense, and/or sell copies of the Software, and to > permit persons to whom the Software is furnished to do so, subject to > the following conditions: > > The above copyright notice and this permission notice shall be > included in all copies or substantial portions of the Software. > > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. > IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY > CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, > TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE > SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ![Versions logo](https://raw.githubusercontent.com/zenangst/Versions/master/Images/logo_v2.png) Helping you find inner peace when comparing version numbers in Swift. Comparing with the current applications version couldn't be easier. ```swift // App.version is 1.0.0 if App.version.olderThan("2.0.0") { // Prompt user to update } ``` But you can apply this to more things than just the `CFBundleShortVersionString`. ```swift let currentVersion = "1.0.1a" if currentVersion.olderThan("1.1.3") { // update } ``` Versions also support semantic versioning (`Major`, `Minor`, `Patch`) ```swift if "1.0".semanticCompare("2.0") == Semantic.Major) { // major update } ``` ## CocoaPod [![Version](https://img.shields.io/cocoapods/v/Versions.svg?style=flat)](http://cocoapods.org/pods/Versions) [![License](https://img.shields.io/cocoapods/l/Versions.svg?style=flat)](http://cocoapods.org/pods/Versions) [![Platform](https://img.shields.io/cocoapods/p/Versions.svg?style=flat)](http://cocoapods.org/pods/Versions) Verisons is available through [CocoaPods](http://cocoapods.org). To install it, simply add the following line to your Podfile: ```ruby pod "Versions" ``` ## Contribute 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create pull request ## Who made this? - Christoffer Winterkvist ([@zenangst](https://twitter.com/zenangst)) - Kostiantyn Koval ([@KostiaKoval](https://twitter.com/KostiaKoval)) ================================================ FILE: Versions/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Versions/StaticVersion.swift ================================================ import Foundation extension Array { func at(index: Int) -> Element? { if index >= 0 && index < self.count { return self[index] } return nil } } public struct Version : Equatable, Comparable{ public let major : Int public let minor : Int public let patch : Int public let string : String? public init?(_ version: String) { let parts: Array = version.split { $0 == "." }.map { String($0) } if let major = parts.at(index: 0), let minor = parts.at(index: 1), let patch = parts.at(index: 2), let majorInt = Int(major), let minorInt = Int(minor), let patchInt = Int(patch) { self.major = majorInt self.minor = minorInt self.patch = patchInt string = version } else { //Failed to Initialize Version return nil } } } //MARK: - Equatable public func == (lhs: Version, rhs: Version) -> Bool { return lhs.string == rhs.string } public func == (lhs: Version, rhs: Version?) -> Bool { switch (rhs) { case let .some(r): return lhs.string == r.string case .none: return false } } //MARK: - Comparable public func < (lhs: Version, rhs: Version) -> Bool { return lhs.string!.compare(rhs.string!, options: .numeric) == .orderedAscending } ================================================ FILE: Versions/Versions.h ================================================ // // Versions.h // Versions // // Created by 郑行之 on 6/7/15. // // #import //! Project version number for Versions. FOUNDATION_EXPORT double VersionsVersionNumber; //! Project version string for Versions. FOUNDATION_EXPORT const unsigned char VersionsVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import ================================================ FILE: Versions/Versions.swift ================================================ import Foundation //MARK: - Versions string functionality public enum Semantic { case major, minor, patch, same, unknown } public struct App { public static var version: String = { var version: String = "" if let infoDictionary = Bundle.main.infoDictionary { version = infoDictionary["CFBundleShortVersionString"] as! String } return version }() } public extension String { subscript (i: Int) -> Character { return self[self.index(self.startIndex, offsetBy: i)] } subscript (i: Int) -> String { return String(self[i] as Character) } subscript (r: Range) -> String { return String(self[self.index(startIndex, offsetBy: r.startIndex).. Bool { return self.compare(version, options: .numeric) == .orderedDescending } func olderThan(version: String) -> Bool { let isEqual: Bool = self == version return !isEqual ? !self.newerThan(version: version) : false } func majorChange(version: String) -> Bool { return self.major != version.major } func minorChange(version: String) -> Bool { return self.minor != version.minor && self.olderThan(version: version) } func patchChange(version: String) -> Bool { return self.patch != version.patch && self.olderThan(version: version) } func semanticCompare(version: String) -> Semantic { switch self { case _ where self == version: return .same case _ where self.major != version.major && self.olderThan(version: version): return .major case _ where (self.minor != version.minor && self.olderThan(version: version)) || (self.major == version.major && self.newerThan(version: version)): return .minor case _ where self.patch != version.patch && self.olderThan(version: version): return .patch default: return .unknown } } } ================================================ FILE: Versions.podspec ================================================ Pod::Spec.new do |s| s.name = "Versions" s.version = "0.5.0" s.summary = "Helping you find inner peace when comparing version numbers in Swift." s.description = <<-DESC * Helping you find inner peace when comparing version numbers in Swift. DESC s.homepage = "https://github.com/zenangst/Versions" s.license = { :type => 'MIT', :file => 'LICENSE.md' } s.author = { "Christoffer Winterkvist" => "christoffer@winterkvist.com" } s.social_media_url = "https://twitter.com/zenangst" s.platform = :ios, '8.0' s.source = { :git => 'https://github.com/zenangst/Versions.git', :tag => s.version.to_s } s.source_files = 'Versions/*.swift' s.frameworks = 'Foundation' s.requires_arc = true end ================================================ FILE: Versions.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 03C709F61B24205A00609F81 /* Version.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03C709DF1B24205A00609F81 /* Version.framework */; }; 03C709F71B24205A00609F81 /* Version.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 03C709DF1B24205A00609F81 /* Version.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 03C70A021B24209D00609F81 /* StaticVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03C709FF1B24209D00609F81 /* StaticVersion.swift */; }; 03C70A031B24209D00609F81 /* Versions.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C70A001B24209D00609F81 /* Versions.h */; }; 03C70A041B24209D00609F81 /* Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03C70A011B24209D00609F81 /* Versions.swift */; }; 03C70A531B24216B00609F81 /* StaticVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03C709FF1B24209D00609F81 /* StaticVersion.swift */; }; 03C70A541B24216B00609F81 /* Versions.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C70A001B24209D00609F81 /* Versions.h */; }; 03C70A551B24216B00609F81 /* Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03C70A011B24209D00609F81 /* Versions.swift */; }; 03C70A5A1B2421B000609F81 /* StaticVersion_Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03C70A561B2421B000609F81 /* StaticVersion_Test.swift */; }; 03C70A5B1B2421B000609F81 /* Versions_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03C70A571B2421B000609F81 /* Versions_Tests.swift */; }; 03C70A5C1B2421B000609F81 /* VersionsDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03C70A581B2421B000609F81 /* VersionsDemoTests.swift */; }; BD87D1A51B0CD38A00244049 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD87D1A41B0CD38A00244049 /* AppDelegate.swift */; }; BD87D1AA1B0CD38A00244049 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD87D1A91B0CD38A00244049 /* ViewController.swift */; }; BD87D1AD1B0CD38A00244049 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BD87D1AB1B0CD38A00244049 /* Main.storyboard */; }; BD87D1AF1B0CD38A00244049 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BD87D1AE1B0CD38A00244049 /* Images.xcassets */; }; BD87D1B21B0CD38A00244049 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = BD87D1B01B0CD38A00244049 /* LaunchScreen.xib */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 03C709F41B24205A00609F81 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BDD8224D1AA45FDD00E48CEF /* Project object */; proxyType = 1; remoteGlobalIDString = 03C709DE1B24205A00609F81; remoteInfo = Versions; }; BD87D1B81B0CD38B00244049 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BDD8224D1AA45FDD00E48CEF /* Project object */; proxyType = 1; remoteGlobalIDString = BD87D19F1B0CD38A00244049; remoteInfo = VersionsDemo; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ 03C709FD1B24205A00609F81 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( 03C709F71B24205A00609F81 /* Version.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 03C709DF1B24205A00609F81 /* Version.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Version.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 03C709E21B24205A00609F81 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 03C709FF1B24209D00609F81 /* StaticVersion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StaticVersion.swift; sourceTree = ""; }; 03C70A001B24209D00609F81 /* Versions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Versions.h; sourceTree = ""; }; 03C70A011B24209D00609F81 /* Versions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Versions.swift; sourceTree = ""; }; 03C70A341B24210C00609F81 /* Version.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Version.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 03C70A561B2421B000609F81 /* StaticVersion_Test.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StaticVersion_Test.swift; sourceTree = ""; }; 03C70A571B2421B000609F81 /* Versions_Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Versions_Tests.swift; sourceTree = ""; }; 03C70A581B2421B000609F81 /* VersionsDemoTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionsDemoTests.swift; sourceTree = ""; }; BD87D1A01B0CD38A00244049 /* VersionsDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VersionsDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; BD87D1A31B0CD38A00244049 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; BD87D1A41B0CD38A00244049 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; BD87D1A91B0CD38A00244049 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; BD87D1AC1B0CD38A00244049 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; BD87D1AE1B0CD38A00244049 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; BD87D1B11B0CD38A00244049 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; BD87D1B71B0CD38B00244049 /* VersionsDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VersionsDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; BD87D1BC1B0CD38B00244049 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; BDD822611AA4608500E48CEF /* Versions.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Versions.podspec; sourceTree = ""; }; BDD822621AA4608500E48CEF /* LICENSE.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = ""; }; BDD822631AA4608500E48CEF /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 03C709DB1B24205A00609F81 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 03C70A301B24210C00609F81 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; BD87D19D1B0CD38A00244049 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 03C709F61B24205A00609F81 /* Version.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; BD87D1B41B0CD38B00244049 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 03C709E01B24205A00609F81 /* Versions */ = { isa = PBXGroup; children = ( 03C70A001B24209D00609F81 /* Versions.h */, 03C709FF1B24209D00609F81 /* StaticVersion.swift */, 03C70A011B24209D00609F81 /* Versions.swift */, 03C709E11B24205A00609F81 /* Supporting Files */, ); path = Versions; sourceTree = ""; }; 03C709E11B24205A00609F81 /* Supporting Files */ = { isa = PBXGroup; children = ( 03C709E21B24205A00609F81 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; BD87D1A11B0CD38A00244049 /* VersionsDemo */ = { isa = PBXGroup; children = ( BD87D1A41B0CD38A00244049 /* AppDelegate.swift */, BD87D1A91B0CD38A00244049 /* ViewController.swift */, BD87D1AB1B0CD38A00244049 /* Main.storyboard */, BD87D1AE1B0CD38A00244049 /* Images.xcassets */, BD87D1B01B0CD38A00244049 /* LaunchScreen.xib */, BD87D1A21B0CD38A00244049 /* Supporting Files */, ); path = VersionsDemo; sourceTree = ""; }; BD87D1A21B0CD38A00244049 /* Supporting Files */ = { isa = PBXGroup; children = ( BD87D1A31B0CD38A00244049 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; BD87D1BA1B0CD38B00244049 /* VersionsDemoTests */ = { isa = PBXGroup; children = ( 03C70A561B2421B000609F81 /* StaticVersion_Test.swift */, 03C70A571B2421B000609F81 /* Versions_Tests.swift */, 03C70A581B2421B000609F81 /* VersionsDemoTests.swift */, BD87D1BB1B0CD38B00244049 /* Supporting Files */, ); path = VersionsDemoTests; sourceTree = ""; }; BD87D1BB1B0CD38B00244049 /* Supporting Files */ = { isa = PBXGroup; children = ( BD87D1BC1B0CD38B00244049 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; BDD8224C1AA45FDD00E48CEF = { isa = PBXGroup; children = ( BD87D1A11B0CD38A00244049 /* VersionsDemo */, BD87D1BA1B0CD38B00244049 /* VersionsDemoTests */, 03C709E01B24205A00609F81 /* Versions */, BDD822581AA4608000E48CEF /* Products */, BDD822611AA4608500E48CEF /* Versions.podspec */, BDD822621AA4608500E48CEF /* LICENSE.md */, BDD822631AA4608500E48CEF /* README.md */, ); indentWidth = 2; sourceTree = ""; tabWidth = 2; }; BDD822581AA4608000E48CEF /* Products */ = { isa = PBXGroup; children = ( BD87D1A01B0CD38A00244049 /* VersionsDemo.app */, BD87D1B71B0CD38B00244049 /* VersionsDemoTests.xctest */, 03C709DF1B24205A00609F81 /* Version.framework */, 03C70A341B24210C00609F81 /* Version.framework */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 03C709DC1B24205A00609F81 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 03C70A031B24209D00609F81 /* Versions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 03C70A311B24210C00609F81 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 03C70A541B24216B00609F81 /* Versions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 03C709DE1B24205A00609F81 /* Versions-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 03C709FC1B24205A00609F81 /* Build configuration list for PBXNativeTarget "Versions-iOS" */; buildPhases = ( 03C709DA1B24205A00609F81 /* Sources */, 03C709DB1B24205A00609F81 /* Frameworks */, 03C709DC1B24205A00609F81 /* Headers */, 03C709DD1B24205A00609F81 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Versions-iOS"; productName = Versions; productReference = 03C709DF1B24205A00609F81 /* Version.framework */; productType = "com.apple.product-type.framework"; }; 03C70A331B24210C00609F81 /* Versions-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = 03C70A4D1B24210C00609F81 /* Build configuration list for PBXNativeTarget "Versions-OSX" */; buildPhases = ( 03C70A2F1B24210C00609F81 /* Sources */, 03C70A301B24210C00609F81 /* Frameworks */, 03C70A311B24210C00609F81 /* Headers */, 03C70A321B24210C00609F81 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Versions-OSX"; productName = "Versions-OSX"; productReference = 03C70A341B24210C00609F81 /* Version.framework */; productType = "com.apple.product-type.framework"; }; BD87D19F1B0CD38A00244049 /* VersionsDemo */ = { isa = PBXNativeTarget; buildConfigurationList = BD87D1C31B0CD38B00244049 /* Build configuration list for PBXNativeTarget "VersionsDemo" */; buildPhases = ( BD87D19C1B0CD38A00244049 /* Sources */, BD87D19D1B0CD38A00244049 /* Frameworks */, BD87D19E1B0CD38A00244049 /* Resources */, 03C709FD1B24205A00609F81 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( 03C709F51B24205A00609F81 /* PBXTargetDependency */, ); name = VersionsDemo; productName = VersionsDemo; productReference = BD87D1A01B0CD38A00244049 /* VersionsDemo.app */; productType = "com.apple.product-type.application"; }; BD87D1B61B0CD38B00244049 /* VersionsDemoTests */ = { isa = PBXNativeTarget; buildConfigurationList = BD87D1C41B0CD38B00244049 /* Build configuration list for PBXNativeTarget "VersionsDemoTests" */; buildPhases = ( BD87D1B31B0CD38B00244049 /* Sources */, BD87D1B41B0CD38B00244049 /* Frameworks */, BD87D1B51B0CD38B00244049 /* Resources */, ); buildRules = ( ); dependencies = ( BD87D1B91B0CD38B00244049 /* PBXTargetDependency */, ); name = VersionsDemoTests; productName = VersionsDemoTests; productReference = BD87D1B71B0CD38B00244049 /* VersionsDemoTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ BDD8224D1AA45FDD00E48CEF /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 1100; TargetAttributes = { 03C709DE1B24205A00609F81 = { CreatedOnToolsVersion = 6.3.2; LastSwiftMigration = 0800; }; 03C70A331B24210C00609F81 = { CreatedOnToolsVersion = 6.3.2; }; BD87D19F1B0CD38A00244049 = { CreatedOnToolsVersion = 6.3.2; LastSwiftMigration = 0800; }; BD87D1B61B0CD38B00244049 = { CreatedOnToolsVersion = 6.3.2; LastSwiftMigration = 0800; TestTargetID = BD87D19F1B0CD38A00244049; }; }; }; buildConfigurationList = BDD822501AA45FDD00E48CEF /* Build configuration list for PBXProject "Versions" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = BDD8224C1AA45FDD00E48CEF; productRefGroup = BDD822581AA4608000E48CEF /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 03C709DE1B24205A00609F81 /* Versions-iOS */, 03C70A331B24210C00609F81 /* Versions-OSX */, BD87D19F1B0CD38A00244049 /* VersionsDemo */, BD87D1B61B0CD38B00244049 /* VersionsDemoTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 03C709DD1B24205A00609F81 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 03C70A321B24210C00609F81 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; BD87D19E1B0CD38A00244049 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( BD87D1AD1B0CD38A00244049 /* Main.storyboard in Resources */, BD87D1B21B0CD38A00244049 /* LaunchScreen.xib in Resources */, BD87D1AF1B0CD38A00244049 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; BD87D1B51B0CD38B00244049 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 03C709DA1B24205A00609F81 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 03C70A041B24209D00609F81 /* Versions.swift in Sources */, 03C70A021B24209D00609F81 /* StaticVersion.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 03C70A2F1B24210C00609F81 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 03C70A551B24216B00609F81 /* Versions.swift in Sources */, 03C70A531B24216B00609F81 /* StaticVersion.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; BD87D19C1B0CD38A00244049 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( BD87D1AA1B0CD38A00244049 /* ViewController.swift in Sources */, BD87D1A51B0CD38A00244049 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; BD87D1B31B0CD38B00244049 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 03C70A5B1B2421B000609F81 /* Versions_Tests.swift in Sources */, 03C70A5A1B2421B000609F81 /* StaticVersion_Test.swift in Sources */, 03C70A5C1B2421B000609F81 /* VersionsDemoTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 03C709F51B24205A00609F81 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 03C709DE1B24205A00609F81 /* Versions-iOS */; targetProxy = 03C709F41B24205A00609F81 /* PBXContainerItemProxy */; }; BD87D1B91B0CD38B00244049 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = BD87D19F1B0CD38A00244049 /* VersionsDemo */; targetProxy = BD87D1B81B0CD38B00244049 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ BD87D1AB1B0CD38A00244049 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( BD87D1AC1B0CD38A00244049 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; BD87D1B01B0CD38A00244049 /* LaunchScreen.xib */ = { isa = PBXVariantGroup; children = ( BD87D1B11B0CD38A00244049 /* Base */, ); name = LaunchScreen.xib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 03C709F81B24205A00609F81 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = Versions/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Version; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 03C709F91B24205A00609F81 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = Versions/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Version; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 03C70A4E1B24210C00609F81 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_VERSION = A; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = Versions/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Version; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 03C70A4F1B24210C00609F81 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_VERSION = A; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = Versions/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Version; SDKROOT = macosx; SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; BD87D1BF1B0CD38B00244049 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = VersionsDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; name = Debug; }; BD87D1C01B0CD38B00244049 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = VersionsDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_VERSION = 5.0; VALIDATE_PRODUCT = YES; }; name = Release; }; BD87D1C11B0CD38B00244049 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = VersionsDemoTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VersionsDemo.app/VersionsDemo"; }; name = Debug; }; BD87D1C21B0CD38B00244049 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = VersionsDemoTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VersionsDemo.app/VersionsDemo"; VALIDATE_PRODUCT = YES; }; name = Release; }; BDD822511AA45FDD00E48CEF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; ONLY_ACTIVE_ARCH = YES; SWIFT_VERSION = 5.0; }; name = Debug; }; BDD822521AA45FDD00E48CEF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 5.0; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 03C709FC1B24205A00609F81 /* Build configuration list for PBXNativeTarget "Versions-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 03C709F81B24205A00609F81 /* Debug */, 03C709F91B24205A00609F81 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 03C70A4D1B24210C00609F81 /* Build configuration list for PBXNativeTarget "Versions-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( 03C70A4E1B24210C00609F81 /* Debug */, 03C70A4F1B24210C00609F81 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; BD87D1C31B0CD38B00244049 /* Build configuration list for PBXNativeTarget "VersionsDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( BD87D1BF1B0CD38B00244049 /* Debug */, BD87D1C01B0CD38B00244049 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; BD87D1C41B0CD38B00244049 /* Build configuration list for PBXNativeTarget "VersionsDemoTests" */ = { isa = XCConfigurationList; buildConfigurations = ( BD87D1C11B0CD38B00244049 /* Debug */, BD87D1C21B0CD38B00244049 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; BDD822501AA45FDD00E48CEF /* Build configuration list for PBXProject "Versions" */ = { isa = XCConfigurationList; buildConfigurations = ( BDD822511AA45FDD00E48CEF /* Debug */, BDD822521AA45FDD00E48CEF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = BDD8224D1AA45FDD00E48CEF /* Project object */; } ================================================ FILE: Versions.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Versions.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: Versions.xcodeproj/xcshareddata/xcschemes/Versions-OSX.xcscheme ================================================ ================================================ FILE: Versions.xcodeproj/xcshareddata/xcschemes/Versions-iOS.xcscheme ================================================ ================================================ FILE: Versions.xcodeproj/xcshareddata/xcschemes/VersionsDemo.xcscheme ================================================ ================================================ FILE: Versions.xcodeproj/xcshareddata/xcschemes/VersionsDemoTests.xcscheme ================================================ ================================================ FILE: VersionsDemo/AppDelegate.swift ================================================ // // AppDelegate.swift // VersionsDemo // // Created by Christoffer Winterkvist on 20/05/15. // // import UIKit import CoreData @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { return true } } ================================================ FILE: VersionsDemo/Base.lproj/LaunchScreen.xib ================================================ ================================================ FILE: VersionsDemo/Base.lproj/Main.storyboard ================================================ ================================================ FILE: VersionsDemo/Images.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: VersionsDemo/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.1 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: VersionsDemo/VersionsDemo.xcdatamodeld/.xccurrentversion ================================================ ================================================ FILE: VersionsDemo/VersionsDemo.xcdatamodeld/VersionsDemo.xcdatamodel/contents ================================================ ================================================ FILE: VersionsDemo/ViewController.swift ================================================ // // ViewController.swift // VersionsDemo // // Created by Christoffer Winterkvist on 20/05/15. // // import UIKit import Version class ViewController: UIViewController { @IBOutlet weak var version: UILabel! override func viewDidLoad() { super.viewDidLoad() version.text = App.version } } ================================================ FILE: VersionsDemoTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: VersionsDemoTests/StaticVersion_Test.swift ================================================ // // StaticVersion_Test.swift // Versions // // Created by Konstantin Koval on 11/03/15. // // import UIKit import XCTest import Version class StaticVersion_Test: XCTestCase { func testVersionStructInit() { let v = Version("1.2.3") let wrongV = Version("1.A.3") XCTAssertTrue(v != nil) XCTAssertTrue(wrongV == nil) } func testVersionStruct() { if let v = Version("1.2.3") { XCTAssertEqual(v.major, 1) XCTAssertEqual(v.minor, 2) XCTAssertEqual(v.patch, 3) } } func testCompare() { if let v = Version("1.2.3"), let v2 = Version("1.2.4"), let vSame = Version("1.2.3"){ XCTAssertFalse(v == v2) XCTAssertFalse(v > vSame) XCTAssertFalse(v < vSame) XCTAssertTrue(v == vSame) XCTAssertTrue(v < v2) XCTAssertTrue(v2 > v) }else{ assertionFailure("Versions nil") } } } ================================================ FILE: VersionsDemoTests/VersionsDemoTests.swift ================================================ // // VersionsDemoTests.swift // VersionsDemoTests // // Created by Christoffer Winterkvist on 20/05/15. // // import UIKit import XCTest import Version class VersionsDemoTests: XCTestCase { func testAppVersion() { let expectedVersion = "1.1" let version = App.version XCTAssertEqual(version, expectedVersion) } func testAppVersionCompare() { XCTAssertTrue(App.version.newerThan(version: "1.0.0")) } } ================================================ FILE: VersionsDemoTests/Versions_Tests.swift ================================================ // // Versions_Tests.swift // Versions Tests // // Created by Christoffer Winterkvist on 3/2/15. // // import UIKit import XCTest import Version class Versions_Tests: XCTestCase { func testNumericNewerThan() { XCTAssertTrue("1.0".newerThan(version: "0.9")) } func testAlphabeticVersion() { XCTAssertTrue("B".newerThan(version: "A")) } func testVerboseVersion() { XCTAssertTrue("1.1.3b".newerThan(version: "1.0.1a")) } func testMajorVerboseVersion() { XCTAssertTrue("2.1".newerThan(version: "1.0.0")) } func testFaultyVersion() { XCTAssertFalse("0.9".newerThan(version: "1.0.0")) } func testSameVersion() { XCTAssertFalse("1.0".newerThan(version: "1.0")) } func testMultiDigitMinorVersion() { XCTAssertTrue("1.9.3".olderThan(version: "1.9.10")) XCTAssertTrue("1.9.10".newerThan(version: "1.9.3")) } func testEmptyVersionString() { XCTAssertTrue("1.0".newerThan(version: "")) XCTAssertFalse("".newerThan(version: "1.0")) } func testSymanticVersioning() { XCTAssertEqual(.same, "1.0".semanticCompare(version: "1.0")) XCTAssertEqual(.major, "1.0".semanticCompare(version: "2.0")) XCTAssertEqual(.minor, "1.2".semanticCompare(version: "1.3")) XCTAssertEqual(.minor, "1.3".semanticCompare(version: "1.2")) XCTAssertEqual(.patch, "1.2.1".semanticCompare(version: "1.2.2")) XCTAssertEqual(.same, "1.0.0".semanticCompare(version: "1.0.0")) XCTAssertEqual(.major, "1.0.0".semanticCompare(version: "2.0.0")) XCTAssertEqual(.minor, "1.2.0".semanticCompare(version: "1.3.0")) XCTAssertEqual(.minor, "1.3.0".semanticCompare(version: "1.2.0")) XCTAssertEqual(.patch, "1.3.0".semanticCompare(version: "1.3.1")) XCTAssertEqual(.minor, "1.2.1".semanticCompare(version: "1.3.1")) } func testMajorChange() { XCTAssertTrue("1.0".majorChange(version: "2.0")) XCTAssertFalse("1.0".majorChange(version: "1.1")) } func testMinorChange() { XCTAssertTrue("1.0".minorChange(version: "1.1")) XCTAssertFalse("1.1".minorChange(version: "1.0.1")) } func testPatchChange() { XCTAssertTrue("1.1.0".patchChange(version: "1.1.1")) XCTAssertFalse("1.1.1".patchChange(version: "1.1.1")) } }