├── .swift-version ├── .ci ├── xcodebuild-data │ └── .gitkeep ├── scripts │ ├── lint │ ├── test-osx │ └── test-ios └── buildkite │ ├── upload │ └── pipeline.template.yml ├── .fastlane ├── .env ├── Appfile └── Fastfile ├── .swiftlint.yml ├── header.png ├── Gemfile ├── .codecov.yml ├── .slather.yml ├── ValueCoding.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata ├── xcshareddata │ ├── IDETemplateMacros.plist │ └── xcschemes │ │ └── ValueCoding.xcscheme └── project.pbxproj ├── Supporting Files ├── Version.xcconfig ├── ValueCoding.h ├── Info.plist ├── Warnings.xcconfig └── ValueCoding.xcconfig ├── .jazzy.json ├── Package.swift ├── Tests ├── Info.plist ├── Support.swift └── ValueCodingTests.swift ├── .gitignore ├── LICENSE ├── ValueCoding.podspec ├── CHANGELOG.md ├── README.md ├── Sources └── ValueCoding.swift └── Gemfile.lock /.swift-version: -------------------------------------------------------------------------------- 1 | 3.2 2 | -------------------------------------------------------------------------------- /.ci/xcodebuild-data/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.fastlane/.env: -------------------------------------------------------------------------------- 1 | DEVELOPER_DIR=/Applications/Xcode.app -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | disabled_rules: 2 | - line_length 3 | -------------------------------------------------------------------------------- /header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danthorpe/ValueCoding/HEAD/header.png -------------------------------------------------------------------------------- /.fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier "me.danthorpe.ValueCoding" 2 | apple_id "someone@somewhere.com" 3 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'slather' 4 | gem 'scan' 5 | gem 'fastlane', '>= 1.35' 6 | gem 'xcpretty' 7 | -------------------------------------------------------------------------------- /.codecov.yml: -------------------------------------------------------------------------------- 1 | comment: 2 | layout: header, changes, diff 3 | coverage: 4 | ignore: 5 | - Tests/.* 6 | status: 7 | patch: false -------------------------------------------------------------------------------- /.ci/scripts/lint: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | source /usr/local/opt/chruby/share/chruby/chruby.sh 3 | chruby ruby 4 | bundle install --quiet && bundle exec fastlane lint 5 | -------------------------------------------------------------------------------- /.slather.yml: -------------------------------------------------------------------------------- 1 | coverage_service: coveralls 2 | xcodeproj: ValueCoding.xcodeproj 3 | build_directory: .ci/xcodebuild-data 4 | ignore: 5 | - Tests/* 6 | - Supporting Files/* -------------------------------------------------------------------------------- /.ci/scripts/test-osx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | source /usr/local/opt/chruby/share/chruby/chruby.sh 3 | chruby ruby 4 | bundle install --quiet && bundle exec fastlane mac test 5 | -------------------------------------------------------------------------------- /.ci/scripts/test-ios: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | source /usr/local/opt/chruby/share/chruby/chruby.sh 3 | chruby ruby 4 | bundle install --quiet && bundle exec fastlane ios test 5 | 6 | -------------------------------------------------------------------------------- /.ci/buildkite/upload: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -eu 4 | 5 | # Makes sure all the steps run on this same agent 6 | sed "s/\$BUILDKITE_AGENT_META_DATA_XCODE/$BUILDKITE_AGENT_META_DATA_XCODE/" .ci/buildkite/pipeline.template.yml 7 | -------------------------------------------------------------------------------- /ValueCoding.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Supporting Files/Version.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // ValueCoding 3 | // File created on 11/10/2015. 4 | // 5 | // Copyright (c) 2015-2017 Daniel Thorpe 6 | // 7 | // ValueCoding is licensed under the MIT License. Read the full license at 8 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 9 | // 10 | 11 | VALUECODING_VERSION = 3.0.0 12 | -------------------------------------------------------------------------------- /.jazzy.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Daniel Thorpe", 3 | "author_url": "http://danthorpe.me", 4 | "github_url": "https://github.com/danthorpe/ValueCoding", 5 | "module": "ValueCoding", 6 | "module_version": "2.2.0", 7 | "readme": "README.md", 8 | "swift_version": "3.2", 9 | "xcodebuild_arguments": [ 10 | "-project", "ValueCoding.xcodeproj", 11 | "-scheme", "ValueCoding" 12 | ], 13 | "exclude": ["Tests"] 14 | } 15 | -------------------------------------------------------------------------------- /Supporting Files/ValueCoding.h: -------------------------------------------------------------------------------- 1 | // 2 | // ValueCoding 3 | // File created on 11/10/2015. 4 | // 5 | // Copyright (c) 2015-2017 Daniel Thorpe 6 | // 7 | // ValueCoding is licensed under the MIT License. Read the full license at 8 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 9 | // 10 | 11 | #import 12 | 13 | FOUNDATION_EXPORT double ValueCodingVersionNumber; 14 | 15 | FOUNDATION_EXPORT const unsigned char ValueCodingVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ValueCoding 3 | // File created on 14/09/2017. 4 | // 5 | // Copyright (c) 2015-2017 Daniel Thorpe 6 | // 7 | // ValueCoding is licensed under the MIT License. Read the full license at 8 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 9 | // 10 | 11 | // swift-tools-version:4.0 12 | 13 | import PackageDescription 14 | 15 | let package = Package( 16 | name: "ValueCoding", 17 | targets: [ 18 | Target(name: "ValueCoding") 19 | ], 20 | exclude: [ 21 | "Tests" 22 | ] 23 | ) 24 | -------------------------------------------------------------------------------- /.ci/buildkite/pipeline.template.yml: -------------------------------------------------------------------------------- 1 | steps: 2 | - 3 | name: "Lint" 4 | command: .ci/scripts/lint 5 | agents: 6 | xcode: "$BUILDKITE_AGENT_META_DATA_XCODE" 7 | 8 | - 9 | name: "Mac" 10 | command: .ci/scripts/test-osx 11 | agents: 12 | xcode: "$BUILDKITE_AGENT_META_DATA_XCODE" 13 | - 14 | name: "iOS" 15 | command: .ci/scripts/test-ios 16 | agents: 17 | queue: "iOS-Simulator" 18 | xcode: "$BUILDKITE_AGENT_META_DATA_XCODE" 19 | env: 20 | FL_SLATHER_BUILDKITE_ENABLED: true 21 | FL_SLATHER_COVERALLS_ENABLED: true 22 | -------------------------------------------------------------------------------- /ValueCoding.xcodeproj/xcshareddata/IDETemplateMacros.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FILEHEADER 6 | 7 | // ___PROJECTNAME___ 8 | // File created on ___DATE___. 9 | // 10 | // Copyright (c) 2015-___YEAR___ Daniel Thorpe 11 | // 12 | // ValueCoding is licensed under the MIT License. Read the full license at 13 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 14 | // 15 | 16 | 17 | -------------------------------------------------------------------------------- /.fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | lane :lint do 2 | 3 | swiftLint( 4 | mode: :lint, 5 | config_file: '.swiftlint.yml' 6 | ) 7 | end 8 | 9 | 10 | platform :ios do 11 | 12 | desc "Runs all the tests" 13 | lane :test do 14 | 15 | scan( 16 | project: "ValueCoding.xcodeproj", 17 | scheme: "ValueCoding", 18 | destination: "platform=iOS Simulator,OS=11.0,name=iPhone SE", 19 | code_coverage: true 20 | ) 21 | 22 | end 23 | end 24 | 25 | platform :mac do 26 | 27 | desc "Runs all the tests" 28 | lane :test do 29 | 30 | scan( 31 | project: "ValueCoding.xcodeproj", 32 | scheme: "ValueCoding", 33 | device: "My Mac" 34 | ) 35 | 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | # Pods/ 27 | 28 | # Carthage 29 | # 30 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 31 | # Carthage/Checkouts 32 | 33 | Carthage/Build 34 | .fastlane/report.xml 35 | .ci/xcodebuild-data 36 | *.coverage.txt 37 | docs 38 | -------------------------------------------------------------------------------- /Supporting Files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | $(VALUECODING_VERSION) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Daniel Thorpe 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Supporting Files/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // ValueCoding 3 | // File created on 11/10/2015. 4 | // 5 | // Copyright (c) 2015-2017 Daniel Thorpe 6 | // 7 | // ValueCoding is licensed under the MIT License. Read the full license at 8 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 9 | // 10 | 11 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES 12 | CLANG_WARN_BOOL_CONVERSION = YES 13 | CLANG_WARN_CONSTANT_CONVERSION = YES 14 | CLANG_WARN_EMPTY_BODY = YES 15 | CLANG_WARN_ENUM_CONVERSION = YES 16 | CLANG_WARN_INFINITE_RECURSION = YES 17 | CLANG_WARN_INT_CONVERSION = YES 18 | CLANG_WARN_SUSPICIOUS_MOVE = YES 19 | CLANG_WARN_UNREACHABLE_CODE = YES 20 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 21 | ENABLE_STRICT_OBJC_MSGSEND = YES 22 | ENABLE_TESTABILITY = YES 23 | GCC_NO_COMMON_BLOCKS = YES 24 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES 25 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR 26 | GCC_WARN_UNDECLARED_SELECTOR = YES 27 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE 28 | GCC_WARN_UNUSED_FUNCTION = YES 29 | GCC_WARN_UNUSED_VARIABLE = YES 30 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR 31 | CLANG_ANALYZER_NONNULL = YES 32 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES 33 | CLANG_WARN_COMMA = YES 34 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES 35 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES 36 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES 37 | CLANG_WARN_STRICT_PROTOTYPES = YES 38 | -------------------------------------------------------------------------------- /ValueCoding.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "ValueCoding" 3 | s.version = "3.0.0" 4 | s.summary = "Swift protocols for encoding/decoding value types." 5 | s.description = <<-DESC 6 | 7 | ValueCoding is a simple pair of protocols to support the archiving 8 | and unarchiving of Swift value types. 9 | 10 | It works by allowing a value type, which must conform to ValueCoding 11 | to define via a typealias its archiver. The archiver is another type 12 | which implements the ArchiverType protocol. This type will typically 13 | be an NSObject which implements NSCoding and is an adaptor which is 14 | responsible for encoding and decoding the properties of the value. 15 | 16 | DESC 17 | s.homepage = "https://github.com/danthorpe/ValueCoding" 18 | s.license = 'MIT' 19 | s.author = { "Daniel Thorpe" => "@danthorpe" } 20 | s.source = { :git => "https://github.com/danthorpe/ValueCoding.git", :tag => s.version.to_s } 21 | s.module_name = 'ValueCoding' 22 | s.social_media_url = 'https://twitter.com/danthorpe' 23 | s.requires_arc = true 24 | s.ios.deployment_target = '8.0' 25 | s.osx.deployment_target = '10.10' 26 | s.tvos.deployment_target = '9.0' 27 | s.watchos.deployment_target = '2.0' 28 | s.source_files = 'Sources/*.swift' 29 | end 30 | -------------------------------------------------------------------------------- /Tests/Support.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ValueCoding 3 | // File created on 11/10/2015. 4 | // 5 | // Copyright (c) 2015-2017 Daniel Thorpe 6 | // 7 | // ValueCoding is licensed under the MIT License. Read the full license at 8 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 9 | // 10 | 11 | import Foundation 12 | import ValueCoding 13 | 14 | struct Foo: ValueCoding { 15 | typealias Coder = FooCoder 16 | let bar: String 17 | } 18 | 19 | class FooCoder: NSObject, NSCoding, CodingProtocol { 20 | 21 | enum Keys: String { 22 | case bar 23 | } 24 | 25 | let value: Foo 26 | 27 | required init(_ aValue: Foo) { 28 | value = aValue 29 | } 30 | 31 | required init?(coder aDecoder: NSCoder) { 32 | let bar = aDecoder.decodeObject(forKey: Keys.bar.rawValue) as? String 33 | value = Foo(bar: bar!) 34 | } 35 | 36 | func encode(with aCoder: NSCoder) { 37 | aCoder.encode(value.bar, forKey: Keys.bar.rawValue) 38 | } 39 | } 40 | 41 | extension Foo: Equatable { } 42 | 43 | func == (lhs: Foo, rhs: Foo) -> Bool { 44 | return lhs.bar == rhs.bar 45 | } 46 | 47 | struct Baz: ValueCoding { 48 | typealias Coder = BazCoder 49 | let bat: String 50 | } 51 | 52 | extension Baz: Equatable { } 53 | 54 | func == (lhs: Baz, rhs: Baz) -> Bool { 55 | return lhs.bat == rhs.bat 56 | } 57 | 58 | class BazCoder: NSObject, NSCoding, CodingProtocol { 59 | 60 | enum Keys: String { 61 | case baz 62 | } 63 | 64 | let value: Baz 65 | 66 | required init(_ aValue: Baz) { 67 | value = aValue 68 | } 69 | 70 | required init?(coder aDecoder: NSCoder) { 71 | let bat = aDecoder.decodeObject(forKey: Keys.baz.rawValue) as? String 72 | value = Baz(bat: bat!) 73 | } 74 | 75 | func encode(with aCoder: NSCoder) { 76 | aCoder.encode(value.bat, forKey: Keys.baz.rawValue) 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /Supporting Files/ValueCoding.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // ValueCoding 3 | // File created on 11/10/2015. 4 | // 5 | // Copyright (c) 2015-2017 Daniel Thorpe 6 | // 7 | // ValueCoding is licensed under the MIT License. Read the full license at 8 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 9 | // 10 | 11 | #include "Version.xcconfig" 12 | 13 | // Metadata 14 | INFOPLIST_FILE_framework = $(SRCROOT)/Supporting Files/Info.plist 15 | INFOPLIST_FILE_xctest = $(SRCROOT)/Tests/Info.plist 16 | INFOPLIST_FILE = $(INFOPLIST_FILE_$(WRAPPER_EXTENSION)) 17 | 18 | PRODUCT_BUNDLE_IDENTIFIER_framework = me.danthorpe.ValueCoding 19 | PRODUCT_BUNDLE_IDENTIFIER_xctest = me.danthorpe.ValueCodingTests 20 | PRODUCT_BUNDLE_IDENTIFIER = $(PRODUCT_BUNDLE_IDENTIFIER_$(WRAPPER_EXTENSION)) 21 | 22 | PRODUCT_NAME_framework = ValueCoding 23 | PRODUCT_NAME_xctest = ValueCodingTests 24 | PRODUCT_NAME = $(PRODUCT_NAME_$(WRAPPER_EXTENSION)) 25 | 26 | APPLICATION_EXTENSION_API_ONLY_framework = YES 27 | APPLICATION_EXTENSION_API_ONLY_xctest = NO 28 | APPLICATION_EXTENSION_API_ONLY = $(APPLICATION_EXTENSION_API_ONLY_$(WRAPPER_EXTENSION)) 29 | 30 | // Build Settings 31 | SWIFT_VERSION = 4.0 32 | SWIFT_SWIFT3_OBJC_INFERENCE = YES 33 | SUPPORTED_PLATFORMS = macosx iphoneos appletvos watchos appletvsimulator iphonesimulator watchsimulator 34 | CLANG_ENABLE_CODE_COVERAGE = YES 35 | 36 | // Code Signing 37 | CODE_SIGN_IDENTITY = - 38 | 39 | // Deployment 40 | DEFINES_MODULE = YES 41 | 42 | MACOSX_DEPLOYMENT_TARGET = 10.11 43 | IPHONEOS_DEPLOYMENT_TARGET = 8.0 44 | TVOS_DEPLOYMENT_TARGET = 9.2 45 | WATCHOS_DEPLOYMENT_TARGET = 2.2 46 | 47 | LD_RUNPATH_SEARCH_PATHS_framework = @executable_path/../Frameworks @loader_path/Frameworks 48 | LD_RUNPATH_SEARCH_PATHS_xctest = @loader_path/Frameworks @executable_path/Frameworks @loader_path/../Frameworks @executable_path/../Frameworks 49 | LD_RUNPATH_SEARCH_PATHS = $(LD_RUNPATH_SEARCH_PATHS_$(WRAPPER_EXTENSION)) 50 | 51 | #include "Warnings.xcconfig" 52 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 3.0.0 2 | This is for Xcode 9, Swift 4.0. 3 | 4 | **Please note that _ValueCoding_ is marked as deprecated, as it has been rendered obsolete by Apple introducing the `Codable` protocol. The project has been mothballed, and will no longer be maintained.** 5 | 6 | # 2.2.0 7 | This is for Xcode 9, Swift 3.2. 8 | 9 | # 2.1.0 10 | This is for Xcode 8.1, Swift 3.0.1 11 | 12 | # 2.0.0 13 | This is the Swift 3.0 compatible version. 14 | 15 | The key change here is that `CodingType` has been renamed to `CodingProtocol` in accordance with Swift 3.0 naming style. 16 | 17 | # 1.5.0 18 | This is a Swift 2.3 compatible version 19 | 20 | # 1.4.0 21 | 1. [[VCD-19](https://github.com/danthorpe/ValueCoding/pull/19)]: Recreates the project to use a single multi-platform framework target. 22 | 23 | # 1.3.0 24 | 1. [[VCD-13](https://github.com/danthorpe/ValueCoding/pull/13)]: Switches test coverage reporting to Coveralls. Also adds SwiftLint rules into the project and CI. 25 | 2. [[VCD-14](https://github.com/danthorpe/ValueCoding/pull/14)]: Updates to Swift 2.2 syntax. :) 26 | 27 | # 1.2.0 28 | 1. [[VCD-9, VCD-10](https://github.com/danthorpe/ValueCoding/pull/10)]: Adds support for a single level of nesting inside SequenceType values. For example it is now possible to encode and decode `[[Foo]]` structures where `Foo` conforms to `ValueCoding`. 29 | 30 | # 1.1.1 31 | 1. [[VCD-7](https://github.com/danthorpe/ValueCoding/pull/7)]: Updates CI stuff. 32 | 2. [[VCD-8](https://github.com/danthorpe/ValueCoding/pull/8)]: Updates documentation and README. Thanks [@mrackwitz](https://github.com/danthorpe/ValueCoding/commit/489809da1ba70abf09bc519b784d77a3c47b9f41). 33 | 34 | # 1.1.0 35 | 1. [[VCD-4](https://github.com/danthorpe/ValueCoding/pull/4)]: Supports tvOS platform, and updates to Xcode 7.1 36 | 37 | # 1.0.1 38 | 1. [[VCD-1](https://github.com/danthorpe/ValueCoding/pull/1)]: Sets up cross platform project 39 | 2. [[VCD-2](https://github.com/danthorpe/ValueCoding/pull/2)]: Adds podspec 40 | -------------------------------------------------------------------------------- /Tests/ValueCodingTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ValueCoding 3 | // File created on 11/10/2015. 4 | // 5 | // Copyright (c) 2015-2017 Daniel Thorpe 6 | // 7 | // ValueCoding is licensed under the MIT License. Read the full license at 8 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 9 | // 10 | 11 | import Foundation 12 | import XCTest 13 | @testable import ValueCoding 14 | 15 | class ValueCodingTests: XCTestCase { 16 | 17 | var item: Foo! 18 | var items: [Foo]! 19 | var nested: [[Foo]]! 20 | 21 | override func setUp() { 22 | super.setUp() 23 | createFoos() 24 | } 25 | 26 | override func tearDown() { 27 | item = nil 28 | items = nil 29 | super.tearDown() 30 | } 31 | 32 | func createFoos() { 33 | item = Foo(bar: "Hello World") 34 | items = [ 35 | item, 36 | Foo(bar: "Hola mundo"), 37 | Foo(bar: "Bonjour le monde"), 38 | Foo(bar: "Hallo Welt"), 39 | Foo(bar: "हैलो वर्ल्ड"), 40 | Foo(bar: "こんにちは世界") 41 | ] 42 | nested = [ 43 | items 44 | ] 45 | } 46 | 47 | func test__single_archiving() { 48 | let unarchived = Foo.decode(item.encoded) 49 | XCTAssertNotNil(unarchived) 50 | XCTAssertEqual(unarchived!, item) 51 | } 52 | 53 | func test__single_incorrect_archiving() { 54 | let unarchived = Baz.decode(item.encoded) 55 | XCTAssertNil(unarchived) 56 | } 57 | 58 | func test__multiple_archiving() { 59 | let unarchived: [Foo] = Foo.decode(items.encoded) 60 | XCTAssertEqual(unarchived, items) 61 | } 62 | 63 | func test__nested_archiving() { 64 | let unarchived: [[Foo]] = Foo.decode(nested.encoded) 65 | XCTAssertEqual(unarchived.count, 1) 66 | XCTAssertEqual(unarchived[0], nested[0]) 67 | } 68 | 69 | func test__with_single_nil() { 70 | let empty: AnyObject? = .none 71 | XCTAssertNil(Foo.decode(empty)) 72 | } 73 | 74 | func test__with_sequence_nil() { 75 | let empty: [AnyObject]? = .none 76 | XCTAssertTrue(Foo.decode(empty).isEmpty) 77 | } 78 | 79 | func test__with_nested_nil() { 80 | let empty: [[AnyObject]]? = .none 81 | XCTAssertTrue(Foo.decode(empty).isEmpty) 82 | } 83 | 84 | func test__get_values_from_sequence_of_archivers() { 85 | XCTAssertEqual(items.encoded.values, items) 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /ValueCoding.xcodeproj/xcshareddata/xcschemes/ValueCoding.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 32 | 33 | 35 | 41 | 42 | 43 | 44 | 45 | 51 | 52 | 53 | 54 | 55 | 56 | 67 | 68 | 74 | 75 | 76 | 77 | 78 | 79 | 85 | 86 | 92 | 93 | 94 | 95 | 97 | 98 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://raw.githubusercontent.com/danthorpe/ValueCoding/development/header.png) 2 | 3 | [![Build status](https://badge.buildkite.com/482fd5558d9ccf05b669c55f40450166033522f32314a1bbb2.svg)](https://buildkite.com/blindingskies/valuecoding) 4 | [![Coverage Status](https://coveralls.io/repos/github/danthorpe/ValueCoding/badge.svg?branch=feature%2FVCD-13_coveralls)](https://coveralls.io/github/danthorpe/ValueCoding?branch=development) 5 | [![CocoaPods Compatible](https://img.shields.io/cocoapods/v/ValueCoding.svg)](https://img.shields.io/cocoapods/v/ValueCoding.svg) 6 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 7 | [![Platform](https://img.shields.io/cocoapods/p/ValueCoding.svg?style=flat)](http://cocoadocs.org/docsets/ValueCoding) 8 | 9 | # ValueCoding 10 | 11 | **Please note that _ValueCoding_ is marked as deprecated, as it has been rendered obsolete by Apple introducing the `Codable` protocol with Swift 4.0. The project has been mothballed, and will no longer be maintained.** 12 | 13 | ValueCoding is a simple pair of protocols to support the coding of Swift value types. 14 | 15 | It works by allowing a value type, which must conform to `ValueCoding` to define via a typealias its *coder*. The coder is another type which implements the `CoderType` protocol. This type will typically be an `NSObject` which implements `NSCoding` and is an adaptor which is responsible for encoding and decoding the properties of the value. 16 | 17 | A minimal example for a simple `struct` is shown below: 18 | 19 | ```swift 20 | import ValueCoding 21 | 22 | struct Foo: ValueCoding { 23 | typealias Coder = FooCoder 24 | let bar: String 25 | } 26 | 27 | class FooCoder: NSObject, NSCoding, CodingType { 28 | 29 | enum Keys: String { 30 | case bar = "bar" 31 | } 32 | 33 | let value: Foo 34 | 35 | required init(_ v: Foo) { 36 | value = v 37 | } 38 | 39 | required init?(coder aDecoder: NSCoder) { 40 | let bar = aDecoder.decodeObjectForKey(Keys.Bar.rawValue) as? String 41 | value = Foo(bar: bar!) 42 | } 43 | 44 | func encodeWithCoder(aCoder: NSCoder) { 45 | aCoder.encodeObject(value.bar, forKey: Keys.Bar.rawValue) 46 | } 47 | } 48 | ``` 49 | 50 | If you are converting existing models from classes to values types, the `NSCoding` methods should look familiar, and hopefully you are able to reuse your existing code. 51 | 52 | The framework provides static methods and properties for types which conform to `ValueCoding` with valid coders. Therefore, given a value of `Foo`, you can encode it ready for archiving using `NSKeyedArchiver`. 53 | 54 | ```swift 55 | let data = NSKeyedArchiver.archivedDataWithRootObject(foo.encoded) 56 | ``` 57 | 58 | and likewise, decoding from unarchiving can be done: 59 | 60 | ```swift 61 | if let foo = Foo.decode(NSKeyedUnarchiver.unarchiveObjectWithData(data)) { 62 | // etc, decode returns optionals when working with a single item. 63 | } 64 | ``` 65 | 66 | These methods can also be used if composing value types inside other types which require encoding. 67 | 68 | When working with sequences of values, use the `encoded` property on the sequence. 69 | 70 | ```swift 71 | let foos = Set(arrayLiteral: Foo(), Foo(), Foo()) 72 | let data = NSKeyedArchiver.archivedDataWithRootObject(foos.encoded) 73 | ``` 74 | 75 | When decoding an `NSArray`, perform a conditional cast to `[AnyObject]` before passing it to `decode`. The result will be an `Array` which will be empty if the object was not cast successfully. In addition, any members of `[AnyObject]` which did not decode will be filtered from the result. This means that the length of the result will be less than the original encoded array if there was an issue decoding. 76 | 77 | ```swift 78 | let foos = Foo.decode(NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [AnyObject]) 79 | ``` 80 | ### CoderType Examples 81 | 82 | The [Money](https://github.com/danthorpe/Money) framework contains more examples of implementing `ValueCoding`. Including the generic type [`FXTransactionCoder`](https://github.com/danthorpe/Money/blob/development/Money/Shared/FX/FX.swift#L467). 83 | 84 | The [YapDatabaseExtensions](https://github.com/danthorpe/YapDatabaseExtensions) framework relies heavily on `ValueCoding`. For more examples of generic where constraints see its [Functional API](https://github.com/danthorpe/YapDatabaseExtensions/tree/development/YapDatabaseExtensions/Shared/Functional). 85 | 86 | ### Installation 87 | ValueCoding builds as a cross platform (iOS, OS X, watchOS, tvOS) extension compatible framework. It is also available via CocoaPods 88 | 89 | ```ruby 90 | pod 'ValueCoding' 91 | ``` 92 | -------------------------------------------------------------------------------- /Sources/ValueCoding.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ValueCoding 3 | // File created on 11/10/2015. 4 | // 5 | // Copyright (c) 2015-2017 Daniel Thorpe 6 | // 7 | // ValueCoding is licensed under the MIT License. Read the full license at 8 | // https://github.com/danthorpe/ValueCoding/blob/master/LICENSE 9 | // 10 | 11 | import Foundation 12 | 13 | // MARK: - CodingProtocol 14 | 15 | @available(*, deprecated, message: "ValueCoding is deprecated as it has been rendered obsolete by Codable in Swift 4.") 16 | public protocol CodedValue { 17 | 18 | /** 19 | The type of the composed value, Value 20 | 21 | - see: ValueCoding 22 | */ 23 | associatedtype Value 24 | 25 | /// The value type which was coded 26 | var value: Value { get } 27 | } 28 | 29 | /** 30 | A generic protocol for classes which can 31 | encode/decode value types. 32 | */ 33 | @available(*, deprecated, message: "ValueCoding is deprecated as it has been rendered obsolete by Codable in Swift 4.") 34 | public protocol CodingProtocol: CodedValue { 35 | 36 | /// Required initializer receiving the wrapped value type. 37 | init(_: Value) 38 | } 39 | 40 | // MARK: - ValueCoding 41 | 42 | /** 43 | A generic protocol for value types which require 44 | coding. 45 | */ 46 | @available(*, deprecated, message: "ValueCoding is deprecated as it has been rendered obsolete by Codable in Swift 4.") 47 | public protocol ValueCoding { 48 | 49 | /** 50 | The Coder which implements CodingProtocol 51 | 52 | - see: CodingProtocol 53 | */ 54 | associatedtype Coder: CodingProtocol 55 | } 56 | 57 | // MARK: - Protocol Extensions 58 | 59 | @available(*, deprecated, message: "ValueCoding is deprecated as it has been rendered obsolete by Codable in Swift 4.") 60 | public extension Sequence where Iterator.Element: CodingProtocol { 61 | 62 | /// Access the values from a sequence of coders. 63 | var values: [Iterator.Element.Value] { 64 | return map { $0.value } 65 | } 66 | } 67 | 68 | /** 69 | Static methods for decoding `AnyObject` to Self, and returning encoded object 70 | of Self. 71 | */ 72 | @available(*, deprecated, message: "ValueCoding is deprecated as it has been rendered obsolete by Codable in Swift 4.") 73 | public extension ValueCoding where Coder: NSCoding, Coder.Value == Self { 74 | 75 | /** 76 | Decodes the value from a single decoder, if possible. 77 | For example 78 | 79 | let foo = Foo.decode(decoder.decodeObjectForKey("foo")) 80 | 81 | - parameter object: an optional `AnyObject` which if not nil should 82 | be of `Coder` type. 83 | - returns: an optional `Self` 84 | */ 85 | static func decode(_ object: Any?) -> Self? { 86 | return (object as? Coder)?.value 87 | } 88 | 89 | /** 90 | Decodes the values from a sequence of coders, if possible 91 | For example 92 | 93 | let foos = Foo.decode(decoder.decodeObjectForKey("foos") as? [AnyObject]) 94 | 95 | - parameter objects: a `SequenceType` of `AnyObject`. 96 | - returns: the array of values which were able to be unarchived. 97 | */ 98 | static func decode(_ objects: S?) -> [Self] where S.Iterator.Element: Any { 99 | return objects?.flatMap(Self.decode) ?? [] 100 | } 101 | 102 | /** 103 | Decodes the values from a sequence of sequence of coders, if possible 104 | 105 | - parameter objects: a `SequenceType` of `SequenceType` of `AnyObject`. 106 | - returns: the array of arrays of values which were able to be unarchived. 107 | */ 108 | static func decode(_ objects: S?) -> [[Self]] where S.Iterator.Element: Sequence, S.Iterator.Element.Iterator.Element: Any { 109 | return objects?.flatMap(Self.decode) ?? [] 110 | } 111 | 112 | /** 113 | Encodes the value type into its Coder. 114 | 115 | Typically this would be used inside of 116 | `encodeWithCoder:` when the value is composed inside 117 | another `ValueCoding` or `NSCoding` type. For example: 118 | 119 | encoder.encodeObject(foo.encoded, forKey: "foo") 120 | 121 | */ 122 | var encoded: Coder { 123 | return Coder(self) 124 | } 125 | } 126 | 127 | @available(*, deprecated, message: "ValueCoding is deprecated as it has been rendered obsolete by Codable in Swift 4.") 128 | extension Sequence where 129 | Iterator.Element: ValueCoding, 130 | Iterator.Element.Coder: NSCoding, 131 | Iterator.Element.Coder.Value == Iterator.Element { 132 | 133 | /** 134 | Encodes the sequence of value types into an array of coders. 135 | 136 | Typically this would be used inside of 137 | `encodeWithCoder:` when a sequence of values is 138 | composed inside another `ValueCoding` or 139 | `NSCoding` type. For example: 140 | 141 | encoder.encodeObject(foos.encoded, forKey: "foos") 142 | 143 | */ 144 | public var encoded: [Iterator.Element.Coder] { 145 | return map { $0.encoded } 146 | } 147 | } 148 | 149 | @available(*, deprecated, message: "ValueCoding is deprecated as it has been rendered obsolete by Codable in Swift 4.") 150 | extension Sequence where 151 | Iterator.Element: Sequence, 152 | Iterator.Element.Iterator.Element: ValueCoding, 153 | Iterator.Element.Iterator.Element.Coder: NSCoding, 154 | Iterator.Element.Iterator.Element.Coder.Value == Iterator.Element.Iterator.Element { 155 | 156 | /** 157 | Encodes a sequence of sequences of value types into 158 | an array of arrays of coders. 159 | */ 160 | public var encoded: [[Iterator.Element.Iterator.Element.Coder]] { 161 | return map { $0.encoded } 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | CFPropertyList (2.3.3) 5 | activesupport (4.2.7.1) 6 | i18n (~> 0.7) 7 | json (~> 1.7, >= 1.7.7) 8 | minitest (~> 5.1) 9 | thread_safe (~> 0.3, >= 0.3.4) 10 | tzinfo (~> 1.1) 11 | addressable (2.4.0) 12 | babosa (1.0.2) 13 | cert (1.4.3) 14 | fastlane_core (>= 0.52.1, < 1.0.0) 15 | spaceship (>= 0.34.2, < 1.0.0) 16 | claide (1.0.1) 17 | clamp (0.6.5) 18 | colored (1.2) 19 | commander (4.4.0) 20 | highline (~> 1.7.2) 21 | credentials_manager (0.16.2) 22 | colored 23 | commander (>= 4.3.5) 24 | highline (>= 1.7.1) 25 | security 26 | deliver (1.14.5) 27 | credentials_manager (>= 0.16.2, < 1.0.0) 28 | fastimage (~> 1.6) 29 | fastlane_core (>= 0.53.0, < 1.0.0) 30 | plist (>= 3.1.0, < 4.0.0) 31 | spaceship (>= 0.36.2, < 1.0.0) 32 | domain_name (0.5.20161021) 33 | unf (>= 0.0.5, < 1.0.0) 34 | dotenv (2.1.1) 35 | excon (0.54.0) 36 | faraday (0.9.2) 37 | multipart-post (>= 1.2, < 3) 38 | faraday-cookie_jar (0.0.6) 39 | faraday (>= 0.7.4) 40 | http-cookie (~> 1.0.0) 41 | faraday_middleware (0.10.0) 42 | faraday (>= 0.7.4, < 0.10) 43 | fastimage (1.6.8) 44 | addressable (~> 2.3, >= 2.3.5) 45 | fastlane (1.106.2) 46 | activesupport (< 5) 47 | addressable (>= 2.3, < 3.0.0) 48 | bundler (~> 1.12) 49 | cert (>= 1.4.3, < 2.0.0) 50 | credentials_manager (>= 0.16.2, < 1.0.0) 51 | deliver (>= 1.14.4, < 2.0.0) 52 | fastlane_core (>= 0.53.0, < 1.0.0) 53 | frameit (>= 3.0.0, < 4.0.0) 54 | gym (>= 1.11.3, < 2.0.0) 55 | krausefx-shenzhen (>= 0.14.10, < 1.0.0) 56 | match (>= 0.9.0, < 1.0.0) 57 | multipart-post (~> 2.0.0) 58 | pem (>= 1.3.2, < 2.0.0) 59 | pilot (>= 1.11.1, < 2.0.0) 60 | plist (>= 3.1.0, < 4.0.0) 61 | produce (>= 1.2.1, < 2.0.0) 62 | scan (>= 0.13.1, < 1.0.0) 63 | screengrab (>= 0.5.2, < 1.0.0) 64 | sigh (>= 1.11.2, < 2.0.0) 65 | slack-notifier (>= 1.3, < 2.0.0) 66 | snapshot (>= 1.16.2, < 2.0.0) 67 | spaceship (>= 0.36.2, < 1.0.0) 68 | supply (>= 0.7.1, < 1.0.0) 69 | terminal-notifier (>= 1.6.2, < 2.0.0) 70 | terminal-table (>= 1.4.5, < 2.0.0) 71 | word_wrap (~> 1.0.0) 72 | xcode-install (~> 2.0.0) 73 | xcodeproj (>= 0.20, < 2.0.0) 74 | xcpretty (>= 0.2.4, < 1.0.0) 75 | fastlane_core (0.53.0) 76 | babosa 77 | colored 78 | commander (>= 4.4.0, <= 5.0.0) 79 | credentials_manager (>= 0.16.2, < 1.0.0) 80 | excon (>= 0.45.0, < 1.0) 81 | gh_inspector (>= 1.0.1, < 2.0.0) 82 | highline (>= 1.7.2) 83 | json 84 | multi_json 85 | plist (>= 3.1.0, < 4.0.0) 86 | rubyzip (~> 1.1.6) 87 | terminal-table (>= 1.4.5, < 2.0.0) 88 | frameit (3.0.0) 89 | deliver (> 0.3) 90 | fastimage (~> 1.6.3) 91 | fastlane_core (>= 0.53.0, < 1.0.0) 92 | mini_magick (~> 4.5.1) 93 | gh_inspector (1.0.2) 94 | google-api-client (0.9.19) 95 | addressable (~> 2.3) 96 | googleauth (~> 0.5) 97 | httpclient (~> 2.7) 98 | hurley (~> 0.1) 99 | memoist (~> 0.11) 100 | mime-types (>= 1.6) 101 | representable (~> 2.3.0) 102 | retriable (~> 2.0) 103 | googleauth (0.5.1) 104 | faraday (~> 0.9) 105 | jwt (~> 1.4) 106 | logging (~> 2.0) 107 | memoist (~> 0.12) 108 | multi_json (~> 1.11) 109 | os (~> 0.9) 110 | signet (~> 0.7) 111 | gym (1.11.3) 112 | fastlane_core (>= 0.52.1, < 1.0.0) 113 | plist (>= 3.1.0, < 4.0.0) 114 | rubyzip (>= 1.1.7) 115 | terminal-table (>= 1.4.5, < 2.0.0) 116 | xcpretty (>= 0.2.4, < 1.0.0) 117 | highline (1.7.8) 118 | http-cookie (1.0.3) 119 | domain_name (~> 0.5) 120 | httpclient (2.8.2.4) 121 | hurley (0.2) 122 | i18n (0.7.0) 123 | json (1.8.3) 124 | jwt (1.5.6) 125 | krausefx-shenzhen (0.14.10) 126 | commander (>= 4.3, < 5.0) 127 | dotenv (>= 0.7) 128 | faraday (~> 0.9) 129 | faraday_middleware (~> 0.9) 130 | highline (>= 1.7.2) 131 | json (~> 1.8) 132 | net-sftp (~> 2.1.2) 133 | plist (~> 3.1.0) 134 | rubyzip (~> 1.1) 135 | security (~> 0.1.3) 136 | terminal-table (~> 1.4.5) 137 | little-plugger (1.1.4) 138 | logging (2.1.0) 139 | little-plugger (~> 1.1) 140 | multi_json (~> 1.10) 141 | match (0.10.0) 142 | cert (>= 1.4.3, < 2.0.0) 143 | credentials_manager (>= 0.16.2, < 1.0.0) 144 | fastlane_core (>= 0.53.0, < 1.0.0) 145 | security 146 | sigh (>= 1.11.2, < 2.0.0) 147 | spaceship (>= 0.36.1, < 1.0.0) 148 | memoist (0.15.0) 149 | mime-types (3.1) 150 | mime-types-data (~> 3.2015) 151 | mime-types-data (3.2016.0521) 152 | mini_magick (4.5.1) 153 | mini_portile2 (2.1.0) 154 | minitest (5.9.1) 155 | multi_json (1.12.1) 156 | multi_xml (0.5.5) 157 | multipart-post (2.0.0) 158 | nanaimo (0.1.2) 159 | net-sftp (2.1.2) 160 | net-ssh (>= 2.6.5) 161 | net-ssh (3.2.0) 162 | nokogiri (1.6.8.1) 163 | mini_portile2 (~> 2.1.0) 164 | os (0.9.6) 165 | pem (1.3.2) 166 | fastlane_core (>= 0.43.1, < 1.0.0) 167 | spaceship (>= 0.26.2, < 1.0.0) 168 | pilot (1.11.1) 169 | credentials_manager (>= 0.16.0) 170 | fastlane_core (>= 0.53.0, < 1.0.0) 171 | spaceship (>= 0.36.2, < 1.0.0) 172 | terminal-table (>= 1.4.5, < 2.0.0) 173 | plist (3.1.0) 174 | produce (1.2.1) 175 | fastlane_core (>= 0.52.1, < 1.0.0) 176 | spaceship (>= 0.34.2, < 1.0.0) 177 | representable (2.3.0) 178 | uber (~> 0.0.7) 179 | retriable (2.1.0) 180 | rouge (1.11.1) 181 | rubyzip (1.1.7) 182 | scan (0.13.1) 183 | fastlane_core (>= 0.52.1, < 1.0.0) 184 | slack-notifier (~> 1.3) 185 | terminal-table 186 | xcpretty (>= 0.2.2) 187 | xcpretty-travis-formatter (>= 0.0.3) 188 | screengrab (0.5.5) 189 | fastlane_core (>= 0.52.1, < 1.0.0) 190 | security (0.1.3) 191 | sigh (1.11.2) 192 | fastlane_core (>= 0.52.1, < 1.0.0) 193 | plist (~> 3.1) 194 | spaceship (>= 0.34.2, < 1.0.0) 195 | signet (0.7.3) 196 | addressable (~> 2.3) 197 | faraday (~> 0.9) 198 | jwt (~> 1.5) 199 | multi_json (~> 1.10) 200 | slack-notifier (1.5.1) 201 | slather (2.3.0) 202 | activesupport (>= 4.0.2, < 5) 203 | clamp (~> 0.6) 204 | nokogiri (~> 1.6.3) 205 | xcodeproj (>= 0.20, < 2.0.0) 206 | snapshot (1.16.3) 207 | fastimage (~> 1.6.3) 208 | fastlane_core (>= 0.53.0, < 1.0.0) 209 | plist (>= 3.1.0, < 4.0.0) 210 | xcpretty (>= 0.2.4, < 1.0.0) 211 | spaceship (0.36.2) 212 | colored 213 | credentials_manager (>= 0.16.0) 214 | faraday (~> 0.9) 215 | faraday-cookie_jar (~> 0.0.6) 216 | faraday_middleware (~> 0.9) 217 | fastimage (~> 1.6) 218 | multi_xml (~> 0.5) 219 | plist (>= 3.1.0, < 4.0.0) 220 | supply (0.7.1) 221 | credentials_manager (>= 0.15.0) 222 | fastlane_core (>= 0.43.4) 223 | google-api-client (~> 0.9.1) 224 | terminal-notifier (1.7.1) 225 | terminal-table (1.4.5) 226 | thread_safe (0.3.5) 227 | tzinfo (1.2.2) 228 | thread_safe (~> 0.1) 229 | uber (0.0.15) 230 | unf (0.1.4) 231 | unf_ext 232 | unf_ext (0.0.7.2) 233 | word_wrap (1.0.0) 234 | xcode-install (2.0.8) 235 | claide (>= 0.9.1, < 1.1.0) 236 | spaceship (>= 0.25.1, < 1.0.0) 237 | xcodeproj (1.4.0) 238 | CFPropertyList (~> 2.3.3) 239 | activesupport (>= 3) 240 | claide (>= 1.0.1, < 2.0) 241 | colored (~> 1.2) 242 | nanaimo (~> 0.1.0) 243 | xcpretty (0.2.4) 244 | rouge (~> 1.8) 245 | xcpretty-travis-formatter (0.0.4) 246 | xcpretty (~> 0.2, >= 0.0.7) 247 | 248 | PLATFORMS 249 | ruby 250 | 251 | DEPENDENCIES 252 | fastlane (>= 1.35) 253 | scan 254 | slather 255 | xcpretty 256 | 257 | BUNDLED WITH 258 | 1.13.6 259 | -------------------------------------------------------------------------------- /ValueCoding.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 658A7B661D776B7600F897C8 /* ValueCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 658A7B5C1D776B7600F897C8 /* ValueCoding.framework */; }; 11 | 65CF6F551D776BBC004B3503 /* ValueCoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65CF6F511D776BBC004B3503 /* ValueCoding.swift */; }; 12 | 65CF6F571D776BBC004B3503 /* ValueCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 65CF6F541D776BBC004B3503 /* ValueCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 | 65CF6F5D1D77744D004B3503 /* Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65CF6F5B1D77744D004B3503 /* Support.swift */; }; 14 | 65CF6F5E1D77744D004B3503 /* ValueCodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65CF6F5C1D77744D004B3503 /* ValueCodingTests.swift */; }; 15 | /* End PBXBuildFile section */ 16 | 17 | /* Begin PBXContainerItemProxy section */ 18 | 658A7B671D776B7600F897C8 /* PBXContainerItemProxy */ = { 19 | isa = PBXContainerItemProxy; 20 | containerPortal = 658A7B511D776B4100F897C8 /* Project object */; 21 | proxyType = 1; 22 | remoteGlobalIDString = 658A7B5B1D776B7600F897C8; 23 | remoteInfo = ValueCoding; 24 | }; 25 | /* End PBXContainerItemProxy section */ 26 | 27 | /* Begin PBXFileReference section */ 28 | 658A7B5C1D776B7600F897C8 /* ValueCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ValueCoding.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 29 | 658A7B651D776B7600F897C8 /* ValueCodingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ValueCodingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | 65A3B8821DC659FE0042BB95 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 31 | 65CF6F511D776BBC004B3503 /* ValueCoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueCoding.swift; sourceTree = ""; }; 32 | 65CF6F531D776BBC004B3503 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 33 | 65CF6F541D776BBC004B3503 /* ValueCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValueCoding.h; sourceTree = ""; }; 34 | 65CF6F581D776BD5004B3503 /* Version.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Version.xcconfig; sourceTree = ""; }; 35 | 65CF6F591D77704D004B3503 /* ValueCoding.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ValueCoding.xcconfig; sourceTree = ""; }; 36 | 65CF6F5B1D77744D004B3503 /* Support.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Support.swift; sourceTree = ""; }; 37 | 65CF6F5C1D77744D004B3503 /* ValueCodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueCodingTests.swift; sourceTree = ""; }; 38 | /* End PBXFileReference section */ 39 | 40 | /* Begin PBXFrameworksBuildPhase section */ 41 | 658A7B581D776B7600F897C8 /* Frameworks */ = { 42 | isa = PBXFrameworksBuildPhase; 43 | buildActionMask = 2147483647; 44 | files = ( 45 | ); 46 | runOnlyForDeploymentPostprocessing = 0; 47 | }; 48 | 658A7B621D776B7600F897C8 /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | 658A7B661D776B7600F897C8 /* ValueCoding.framework in Frameworks */, 53 | ); 54 | runOnlyForDeploymentPostprocessing = 0; 55 | }; 56 | /* End PBXFrameworksBuildPhase section */ 57 | 58 | /* Begin PBXGroup section */ 59 | 658A7B501D776B4100F897C8 = { 60 | isa = PBXGroup; 61 | children = ( 62 | 65CF6F501D776BBC004B3503 /* Sources */, 63 | 65CF6F5A1D77744D004B3503 /* Tests */, 64 | 65A3B8811DC659EA0042BB95 /* ... */, 65 | ); 66 | sourceTree = ""; 67 | }; 68 | 658A7B5D1D776B7600F897C8 /* Products */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 658A7B5C1D776B7600F897C8 /* ValueCoding.framework */, 72 | 658A7B651D776B7600F897C8 /* ValueCodingTests.xctest */, 73 | ); 74 | name = Products; 75 | sourceTree = ""; 76 | }; 77 | 65A3B8811DC659EA0042BB95 /* ... */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 65CF6F521D776BBC004B3503 /* Supporting Files */, 81 | 658A7B5D1D776B7600F897C8 /* Products */, 82 | ); 83 | name = ...; 84 | sourceTree = ""; 85 | }; 86 | 65CF6F501D776BBC004B3503 /* Sources */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 65CF6F511D776BBC004B3503 /* ValueCoding.swift */, 90 | ); 91 | path = Sources; 92 | sourceTree = ""; 93 | }; 94 | 65CF6F521D776BBC004B3503 /* Supporting Files */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 65CF6F541D776BBC004B3503 /* ValueCoding.h */, 98 | 65CF6F531D776BBC004B3503 /* Info.plist */, 99 | 65CF6F591D77704D004B3503 /* ValueCoding.xcconfig */, 100 | 65CF6F581D776BD5004B3503 /* Version.xcconfig */, 101 | 65A3B8821DC659FE0042BB95 /* Warnings.xcconfig */, 102 | ); 103 | path = "Supporting Files"; 104 | sourceTree = ""; 105 | }; 106 | 65CF6F5A1D77744D004B3503 /* Tests */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 65CF6F5B1D77744D004B3503 /* Support.swift */, 110 | 65CF6F5C1D77744D004B3503 /* ValueCodingTests.swift */, 111 | ); 112 | path = Tests; 113 | sourceTree = ""; 114 | }; 115 | /* End PBXGroup section */ 116 | 117 | /* Begin PBXHeadersBuildPhase section */ 118 | 658A7B591D776B7600F897C8 /* Headers */ = { 119 | isa = PBXHeadersBuildPhase; 120 | buildActionMask = 2147483647; 121 | files = ( 122 | 65CF6F571D776BBC004B3503 /* ValueCoding.h in Headers */, 123 | ); 124 | runOnlyForDeploymentPostprocessing = 0; 125 | }; 126 | /* End PBXHeadersBuildPhase section */ 127 | 128 | /* Begin PBXNativeTarget section */ 129 | 658A7B5B1D776B7600F897C8 /* ValueCoding */ = { 130 | isa = PBXNativeTarget; 131 | buildConfigurationList = 658A7B6E1D776B7600F897C8 /* Build configuration list for PBXNativeTarget "ValueCoding" */; 132 | buildPhases = ( 133 | 658A7B571D776B7600F897C8 /* Sources */, 134 | 658A7B581D776B7600F897C8 /* Frameworks */, 135 | 658A7B591D776B7600F897C8 /* Headers */, 136 | 658A7B5A1D776B7600F897C8 /* Resources */, 137 | ); 138 | buildRules = ( 139 | ); 140 | dependencies = ( 141 | ); 142 | name = ValueCoding; 143 | productName = ValueCoding; 144 | productReference = 658A7B5C1D776B7600F897C8 /* ValueCoding.framework */; 145 | productType = "com.apple.product-type.framework"; 146 | }; 147 | 658A7B641D776B7600F897C8 /* ValueCodingTests */ = { 148 | isa = PBXNativeTarget; 149 | buildConfigurationList = 658A7B711D776B7600F897C8 /* Build configuration list for PBXNativeTarget "ValueCodingTests" */; 150 | buildPhases = ( 151 | 658A7B611D776B7600F897C8 /* Sources */, 152 | 658A7B621D776B7600F897C8 /* Frameworks */, 153 | 658A7B631D776B7600F897C8 /* Resources */, 154 | ); 155 | buildRules = ( 156 | ); 157 | dependencies = ( 158 | 658A7B681D776B7600F897C8 /* PBXTargetDependency */, 159 | ); 160 | name = ValueCodingTests; 161 | productName = ValueCodingTests; 162 | productReference = 658A7B651D776B7600F897C8 /* ValueCodingTests.xctest */; 163 | productType = "com.apple.product-type.bundle.unit-test"; 164 | }; 165 | /* End PBXNativeTarget section */ 166 | 167 | /* Begin PBXProject section */ 168 | 658A7B511D776B4100F897C8 /* Project object */ = { 169 | isa = PBXProject; 170 | attributes = { 171 | LastSwiftUpdateCheck = 0800; 172 | LastUpgradeCheck = 0900; 173 | TargetAttributes = { 174 | 658A7B5B1D776B7600F897C8 = { 175 | CreatedOnToolsVersion = 8.0; 176 | LastSwiftMigration = 0900; 177 | ProvisioningStyle = Automatic; 178 | }; 179 | 658A7B641D776B7600F897C8 = { 180 | CreatedOnToolsVersion = 8.0; 181 | LastSwiftMigration = 0900; 182 | ProvisioningStyle = Automatic; 183 | }; 184 | }; 185 | }; 186 | buildConfigurationList = 658A7B541D776B4100F897C8 /* Build configuration list for PBXProject "ValueCoding" */; 187 | compatibilityVersion = "Xcode 3.2"; 188 | developmentRegion = English; 189 | hasScannedForEncodings = 0; 190 | knownRegions = ( 191 | en, 192 | ); 193 | mainGroup = 658A7B501D776B4100F897C8; 194 | productRefGroup = 658A7B5D1D776B7600F897C8 /* Products */; 195 | projectDirPath = ""; 196 | projectRoot = ""; 197 | targets = ( 198 | 658A7B5B1D776B7600F897C8 /* ValueCoding */, 199 | 658A7B641D776B7600F897C8 /* ValueCodingTests */, 200 | ); 201 | }; 202 | /* End PBXProject section */ 203 | 204 | /* Begin PBXResourcesBuildPhase section */ 205 | 658A7B5A1D776B7600F897C8 /* Resources */ = { 206 | isa = PBXResourcesBuildPhase; 207 | buildActionMask = 2147483647; 208 | files = ( 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | 658A7B631D776B7600F897C8 /* Resources */ = { 213 | isa = PBXResourcesBuildPhase; 214 | buildActionMask = 2147483647; 215 | files = ( 216 | ); 217 | runOnlyForDeploymentPostprocessing = 0; 218 | }; 219 | /* End PBXResourcesBuildPhase section */ 220 | 221 | /* Begin PBXSourcesBuildPhase section */ 222 | 658A7B571D776B7600F897C8 /* Sources */ = { 223 | isa = PBXSourcesBuildPhase; 224 | buildActionMask = 2147483647; 225 | files = ( 226 | 65CF6F551D776BBC004B3503 /* ValueCoding.swift in Sources */, 227 | ); 228 | runOnlyForDeploymentPostprocessing = 0; 229 | }; 230 | 658A7B611D776B7600F897C8 /* Sources */ = { 231 | isa = PBXSourcesBuildPhase; 232 | buildActionMask = 2147483647; 233 | files = ( 234 | 65CF6F5D1D77744D004B3503 /* Support.swift in Sources */, 235 | 65CF6F5E1D77744D004B3503 /* ValueCodingTests.swift in Sources */, 236 | ); 237 | runOnlyForDeploymentPostprocessing = 0; 238 | }; 239 | /* End PBXSourcesBuildPhase section */ 240 | 241 | /* Begin PBXTargetDependency section */ 242 | 658A7B681D776B7600F897C8 /* PBXTargetDependency */ = { 243 | isa = PBXTargetDependency; 244 | target = 658A7B5B1D776B7600F897C8 /* ValueCoding */; 245 | targetProxy = 658A7B671D776B7600F897C8 /* PBXContainerItemProxy */; 246 | }; 247 | /* End PBXTargetDependency section */ 248 | 249 | /* Begin XCBuildConfiguration section */ 250 | 658A7B551D776B4100F897C8 /* Debug */ = { 251 | isa = XCBuildConfiguration; 252 | baseConfigurationReference = 65CF6F591D77704D004B3503 /* ValueCoding.xcconfig */; 253 | buildSettings = { 254 | ONLY_ACTIVE_ARCH = YES; 255 | }; 256 | name = Debug; 257 | }; 258 | 658A7B561D776B4100F897C8 /* Release */ = { 259 | isa = XCBuildConfiguration; 260 | baseConfigurationReference = 65CF6F591D77704D004B3503 /* ValueCoding.xcconfig */; 261 | buildSettings = { 262 | }; 263 | name = Release; 264 | }; 265 | 658A7B6F1D776B7600F897C8 /* Debug */ = { 266 | isa = XCBuildConfiguration; 267 | buildSettings = { 268 | ALWAYS_SEARCH_USER_PATHS = NO; 269 | CLANG_ANALYZER_NONNULL = YES; 270 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 271 | CLANG_CXX_LIBRARY = "libc++"; 272 | CLANG_ENABLE_MODULES = YES; 273 | CLANG_ENABLE_OBJC_ARC = YES; 274 | CLANG_WARN_BOOL_CONVERSION = YES; 275 | CLANG_WARN_CONSTANT_CONVERSION = YES; 276 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 277 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 278 | CLANG_WARN_EMPTY_BODY = YES; 279 | CLANG_WARN_ENUM_CONVERSION = YES; 280 | CLANG_WARN_INFINITE_RECURSION = YES; 281 | CLANG_WARN_INT_CONVERSION = YES; 282 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 283 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 284 | CLANG_WARN_UNREACHABLE_CODE = YES; 285 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 286 | COMBINE_HIDPI_IMAGES = YES; 287 | COPY_PHASE_STRIP = NO; 288 | CURRENT_PROJECT_VERSION = 1; 289 | DEBUG_INFORMATION_FORMAT = dwarf; 290 | DEFINES_MODULE = YES; 291 | DYLIB_COMPATIBILITY_VERSION = 1; 292 | DYLIB_CURRENT_VERSION = 1; 293 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 294 | ENABLE_STRICT_OBJC_MSGSEND = YES; 295 | ENABLE_TESTABILITY = YES; 296 | FRAMEWORK_VERSION = A; 297 | GCC_C_LANGUAGE_STANDARD = gnu99; 298 | GCC_DYNAMIC_NO_PIC = NO; 299 | GCC_NO_COMMON_BLOCKS = YES; 300 | GCC_OPTIMIZATION_LEVEL = 0; 301 | GCC_PREPROCESSOR_DEFINITIONS = ( 302 | "DEBUG=1", 303 | "$(inherited)", 304 | ); 305 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 306 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 307 | GCC_WARN_UNDECLARED_SELECTOR = YES; 308 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 309 | GCC_WARN_UNUSED_FUNCTION = YES; 310 | GCC_WARN_UNUSED_VARIABLE = YES; 311 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 312 | MACOSX_DEPLOYMENT_TARGET = 10.11; 313 | MTL_ENABLE_DEBUG_INFO = YES; 314 | SDKROOT = macosx; 315 | SKIP_INSTALL = YES; 316 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 317 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 318 | VERSIONING_SYSTEM = "apple-generic"; 319 | VERSION_INFO_PREFIX = ""; 320 | }; 321 | name = Debug; 322 | }; 323 | 658A7B701D776B7600F897C8 /* Release */ = { 324 | isa = XCBuildConfiguration; 325 | buildSettings = { 326 | ALWAYS_SEARCH_USER_PATHS = NO; 327 | CLANG_ANALYZER_NONNULL = YES; 328 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 329 | CLANG_CXX_LIBRARY = "libc++"; 330 | CLANG_ENABLE_MODULES = YES; 331 | CLANG_ENABLE_OBJC_ARC = YES; 332 | CLANG_WARN_BOOL_CONVERSION = YES; 333 | CLANG_WARN_CONSTANT_CONVERSION = YES; 334 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 335 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 336 | CLANG_WARN_EMPTY_BODY = YES; 337 | CLANG_WARN_ENUM_CONVERSION = YES; 338 | CLANG_WARN_INFINITE_RECURSION = YES; 339 | CLANG_WARN_INT_CONVERSION = YES; 340 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 341 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 342 | CLANG_WARN_UNREACHABLE_CODE = YES; 343 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 344 | COMBINE_HIDPI_IMAGES = YES; 345 | COPY_PHASE_STRIP = NO; 346 | CURRENT_PROJECT_VERSION = 1; 347 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 348 | DEFINES_MODULE = YES; 349 | DYLIB_COMPATIBILITY_VERSION = 1; 350 | DYLIB_CURRENT_VERSION = 1; 351 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 352 | ENABLE_NS_ASSERTIONS = NO; 353 | ENABLE_STRICT_OBJC_MSGSEND = YES; 354 | FRAMEWORK_VERSION = A; 355 | GCC_C_LANGUAGE_STANDARD = gnu99; 356 | GCC_NO_COMMON_BLOCKS = YES; 357 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 358 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 359 | GCC_WARN_UNDECLARED_SELECTOR = YES; 360 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 361 | GCC_WARN_UNUSED_FUNCTION = YES; 362 | GCC_WARN_UNUSED_VARIABLE = YES; 363 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 364 | MACOSX_DEPLOYMENT_TARGET = 10.11; 365 | MTL_ENABLE_DEBUG_INFO = NO; 366 | SDKROOT = macosx; 367 | SKIP_INSTALL = YES; 368 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 369 | VERSIONING_SYSTEM = "apple-generic"; 370 | VERSION_INFO_PREFIX = ""; 371 | }; 372 | name = Release; 373 | }; 374 | 658A7B721D776B7600F897C8 /* Debug */ = { 375 | isa = XCBuildConfiguration; 376 | buildSettings = { 377 | ALWAYS_SEARCH_USER_PATHS = NO; 378 | CLANG_ANALYZER_NONNULL = YES; 379 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 380 | CLANG_CXX_LIBRARY = "libc++"; 381 | CLANG_ENABLE_MODULES = YES; 382 | CLANG_ENABLE_OBJC_ARC = YES; 383 | CLANG_WARN_BOOL_CONVERSION = YES; 384 | CLANG_WARN_CONSTANT_CONVERSION = YES; 385 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 386 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 387 | CLANG_WARN_EMPTY_BODY = YES; 388 | CLANG_WARN_ENUM_CONVERSION = YES; 389 | CLANG_WARN_INFINITE_RECURSION = YES; 390 | CLANG_WARN_INT_CONVERSION = YES; 391 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 392 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 393 | CLANG_WARN_UNREACHABLE_CODE = YES; 394 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 395 | CODE_SIGN_IDENTITY = "-"; 396 | COMBINE_HIDPI_IMAGES = YES; 397 | COPY_PHASE_STRIP = NO; 398 | DEBUG_INFORMATION_FORMAT = dwarf; 399 | ENABLE_STRICT_OBJC_MSGSEND = YES; 400 | ENABLE_TESTABILITY = YES; 401 | GCC_C_LANGUAGE_STANDARD = gnu99; 402 | GCC_DYNAMIC_NO_PIC = NO; 403 | GCC_NO_COMMON_BLOCKS = YES; 404 | GCC_OPTIMIZATION_LEVEL = 0; 405 | GCC_PREPROCESSOR_DEFINITIONS = ( 406 | "DEBUG=1", 407 | "$(inherited)", 408 | ); 409 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 410 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 411 | GCC_WARN_UNDECLARED_SELECTOR = YES; 412 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 413 | GCC_WARN_UNUSED_FUNCTION = YES; 414 | GCC_WARN_UNUSED_VARIABLE = YES; 415 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 416 | MTL_ENABLE_DEBUG_INFO = YES; 417 | SDKROOT = macosx; 418 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 419 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 420 | }; 421 | name = Debug; 422 | }; 423 | 658A7B731D776B7600F897C8 /* Release */ = { 424 | isa = XCBuildConfiguration; 425 | buildSettings = { 426 | ALWAYS_SEARCH_USER_PATHS = NO; 427 | CLANG_ANALYZER_NONNULL = YES; 428 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 429 | CLANG_CXX_LIBRARY = "libc++"; 430 | CLANG_ENABLE_MODULES = YES; 431 | CLANG_ENABLE_OBJC_ARC = YES; 432 | CLANG_WARN_BOOL_CONVERSION = YES; 433 | CLANG_WARN_CONSTANT_CONVERSION = YES; 434 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 435 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 436 | CLANG_WARN_EMPTY_BODY = YES; 437 | CLANG_WARN_ENUM_CONVERSION = YES; 438 | CLANG_WARN_INFINITE_RECURSION = YES; 439 | CLANG_WARN_INT_CONVERSION = YES; 440 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 441 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 442 | CLANG_WARN_UNREACHABLE_CODE = YES; 443 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 444 | CODE_SIGN_IDENTITY = "-"; 445 | COMBINE_HIDPI_IMAGES = YES; 446 | COPY_PHASE_STRIP = NO; 447 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 448 | ENABLE_NS_ASSERTIONS = NO; 449 | ENABLE_STRICT_OBJC_MSGSEND = YES; 450 | GCC_C_LANGUAGE_STANDARD = gnu99; 451 | GCC_NO_COMMON_BLOCKS = YES; 452 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 453 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 454 | GCC_WARN_UNDECLARED_SELECTOR = YES; 455 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 456 | GCC_WARN_UNUSED_FUNCTION = YES; 457 | GCC_WARN_UNUSED_VARIABLE = YES; 458 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 459 | MTL_ENABLE_DEBUG_INFO = NO; 460 | SDKROOT = macosx; 461 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 462 | }; 463 | name = Release; 464 | }; 465 | /* End XCBuildConfiguration section */ 466 | 467 | /* Begin XCConfigurationList section */ 468 | 658A7B541D776B4100F897C8 /* Build configuration list for PBXProject "ValueCoding" */ = { 469 | isa = XCConfigurationList; 470 | buildConfigurations = ( 471 | 658A7B551D776B4100F897C8 /* Debug */, 472 | 658A7B561D776B4100F897C8 /* Release */, 473 | ); 474 | defaultConfigurationIsVisible = 0; 475 | defaultConfigurationName = Release; 476 | }; 477 | 658A7B6E1D776B7600F897C8 /* Build configuration list for PBXNativeTarget "ValueCoding" */ = { 478 | isa = XCConfigurationList; 479 | buildConfigurations = ( 480 | 658A7B6F1D776B7600F897C8 /* Debug */, 481 | 658A7B701D776B7600F897C8 /* Release */, 482 | ); 483 | defaultConfigurationIsVisible = 0; 484 | defaultConfigurationName = Release; 485 | }; 486 | 658A7B711D776B7600F897C8 /* Build configuration list for PBXNativeTarget "ValueCodingTests" */ = { 487 | isa = XCConfigurationList; 488 | buildConfigurations = ( 489 | 658A7B721D776B7600F897C8 /* Debug */, 490 | 658A7B731D776B7600F897C8 /* Release */, 491 | ); 492 | defaultConfigurationIsVisible = 0; 493 | defaultConfigurationName = Release; 494 | }; 495 | /* End XCConfigurationList section */ 496 | }; 497 | rootObject = 658A7B511D776B4100F897C8 /* Project object */; 498 | } 499 | --------------------------------------------------------------------------------