├── README.md
├── SwiftTouchIDExample.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcuserdata
│ │ └── kramer.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
├── xcuserdata
│ └── kramer.xcuserdatad
│ │ └── xcschemes
│ │ ├── xcschememanagement.plist
│ │ └── SwiftTouchIDExample.xcscheme
└── project.pbxproj
└── SwiftTouchIDExample
├── Images.xcassets
├── AppIcon.appiconset
│ └── Contents.json
└── LaunchImage.launchimage
│ └── Contents.json
├── Info.plist
├── AppDelegate.swift
├── MainStoryboard.storyboard
└── MainViewController.swift
/README.md:
--------------------------------------------------------------------------------
1 | Swift-Touch-ID
2 | ==============
3 |
4 | Example Local Authentication usage with Touch ID Authentication written in Swift
5 |
--------------------------------------------------------------------------------
/SwiftTouchIDExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SwiftTouchIDExample.xcodeproj/project.xcworkspace/xcuserdata/kramer.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Shmoopi/Swift-Touch-ID/HEAD/SwiftTouchIDExample.xcodeproj/project.xcworkspace/xcuserdata/kramer.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/SwiftTouchIDExample/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "40x40",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "60x60",
16 | "scale" : "2x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/SwiftTouchIDExample/Images.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "orientation" : "portrait",
5 | "idiom" : "iphone",
6 | "extent" : "full-screen",
7 | "minimum-system-version" : "7.0",
8 | "scale" : "2x"
9 | },
10 | {
11 | "orientation" : "portrait",
12 | "idiom" : "iphone",
13 | "subtype" : "retina4",
14 | "extent" : "full-screen",
15 | "minimum-system-version" : "7.0",
16 | "scale" : "2x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/SwiftTouchIDExample.xcodeproj/xcuserdata/kramer.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | SwiftTouchIDExample.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | 4C21395C194205FB0048DD91
16 |
17 | primary
18 |
19 |
20 | 4C213969194205FB0048DD91
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/SwiftTouchIDExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | net.shmoopi.${PRODUCT_NAME:rfc1034identifier}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UIMainStoryboardFile
26 | MainStoryboard
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/SwiftTouchIDExample/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // SwiftTouchIDExample
4 | // Test the LocalAuthentication Framework in Swift
5 | //
6 | // Created by Shmoopi on 6/6/14.
7 | // Copyright (c) 2014 Shmoopi LLC. All rights reserved.
8 | //
9 |
10 | import UIKit
11 |
12 | @UIApplicationMain
13 | class AppDelegate: UIResponder, UIApplicationDelegate {
14 |
15 | var window: UIWindow?
16 |
17 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
18 | // Override point
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(application: UIApplication) {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(application: UIApplication) {
28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(application: UIApplication) {
33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(application: UIApplication) {
37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
38 | }
39 |
40 | func applicationWillTerminate(application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/SwiftTouchIDExample/MainStoryboard.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/SwiftTouchIDExample.xcodeproj/xcuserdata/kramer.xcuserdatad/xcschemes/SwiftTouchIDExample.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
61 |
62 |
68 |
69 |
70 |
71 |
72 |
73 |
79 |
80 |
86 |
87 |
88 |
89 |
91 |
92 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/SwiftTouchIDExample/MainViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MainViewController.swift
3 | // SwiftTouchIDExample
4 | // Test the LocalAuthentication Framework in Swift
5 | //
6 | // Created by Shmoopi on 6/6/14.
7 | // Copyright (c) 2014 Shmoopi LLC. All rights reserved.
8 | //
9 |
10 | import UIKit
11 | import LocalAuthentication
12 |
13 | class MainViewController: UIViewController {
14 |
15 | init(coder aDecoder: NSCoder!) {
16 | super.init(coder: aDecoder)
17 | // Custom initialization
18 | }
19 |
20 | override func viewDidLoad() {
21 | super.viewDidLoad()
22 |
23 | // Do any additional setup after loading the view.
24 | }
25 |
26 | // Test the local authentication framework
27 | @IBAction func testTouchID(sender : AnyObject) {
28 |
29 | // Create an alert
30 | var alert = UIAlertController(title: "", message: "", preferredStyle: UIAlertControllerStyle.Alert)
31 | // Add the cancel button to the alert
32 | alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
33 |
34 | // Create the Local Authentication Context
35 | var touchIDContext = LAContext()
36 | var touchIDError : NSError?
37 | var reasonString = "Local Authentication Testing"
38 |
39 | // Check if we can access local device authentication
40 | if touchIDContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error:&touchIDError) {
41 | // Check what the authentication response was
42 | touchIDContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: {
43 | (success: Bool, error: NSError?) -> Void in
44 | // Check if we passed or failed
45 | if success {
46 | // User authenticated using Local Device Authentication Successfully!
47 |
48 | // Show a success alert
49 | alert.title = "Success!"
50 | alert.message = "You have authenticated!"
51 | self.presentViewController(alert, animated: true, completion: nil)
52 |
53 | } else {
54 | // Unsuccessful
55 |
56 | // Set the title of the unsuccessful alert
57 | alert.title = "Unsuccessful!"
58 |
59 | // Set the message of the alert
60 | switch error!.code {
61 | case LAError.UserCancel.toRaw():
62 | alert.message = "User Cancelled"
63 | case LAError.AuthenticationFailed.toRaw():
64 | alert.message = "Authentication Failed"
65 | case LAError.PasscodeNotSet.toRaw():
66 | alert.message = "Passcode Not Set"
67 | case LAError.SystemCancel.toRaw():
68 | alert.message = "System Cancelled"
69 | case LAError.UserFallback.toRaw():
70 | alert.message = "User chose to try a password"
71 | default:
72 | alert.message = "Unable to Authenticate!"
73 | }
74 |
75 | // Show the alert
76 | self.presentViewController(alert, animated: true, completion: nil)
77 | }
78 | })
79 | } else {
80 | // Unable to access local device authentication
81 |
82 | // Set the error title
83 | alert.title = "Error"
84 |
85 | // Set the error alert message with more information
86 | switch touchIDError!.code {
87 | case LAError.TouchIDNotEnrolled.toRaw():
88 | alert.message = "Touch ID is not enrolled"
89 | case LAError.TouchIDNotAvailable.toRaw():
90 | alert.message = "Touch ID not available"
91 | case LAError.PasscodeNotSet.toRaw():
92 | alert.message = "Passcode has not been set"
93 | default:
94 | alert.message = "Local Authentication not available"
95 | }
96 |
97 | // Show the alert
98 | self.presentViewController(alert, animated: true, completion: nil)
99 | }
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/SwiftTouchIDExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 4C213963194205FB0048DD91 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C213962194205FB0048DD91 /* AppDelegate.swift */; };
11 | 4C213965194205FB0048DD91 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C213964194205FB0048DD91 /* Images.xcassets */; };
12 | 4C21397C194242440048DD91 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4C21397B194242440048DD91 /* MainStoryboard.storyboard */; };
13 | 4C21397E194242AB0048DD91 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C21397D194242AB0048DD91 /* MainViewController.swift */; };
14 | /* End PBXBuildFile section */
15 |
16 | /* Begin PBXFileReference section */
17 | 4C21395D194205FB0048DD91 /* SwiftTouchIDExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftTouchIDExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
18 | 4C213961194205FB0048DD91 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
19 | 4C213962194205FB0048DD91 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
20 | 4C213964194205FB0048DD91 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
21 | 4C21397B194242440048DD91 /* MainStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MainStoryboard.storyboard; sourceTree = ""; };
22 | 4C21397D194242AB0048DD91 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; };
23 | /* End PBXFileReference section */
24 |
25 | /* Begin PBXFrameworksBuildPhase section */
26 | 4C21395A194205FB0048DD91 /* Frameworks */ = {
27 | isa = PBXFrameworksBuildPhase;
28 | buildActionMask = 2147483647;
29 | files = (
30 | );
31 | runOnlyForDeploymentPostprocessing = 0;
32 | };
33 | /* End PBXFrameworksBuildPhase section */
34 |
35 | /* Begin PBXGroup section */
36 | 4C213954194205FB0048DD91 = {
37 | isa = PBXGroup;
38 | children = (
39 | 4C21395F194205FB0048DD91 /* SwiftTouchIDExample */,
40 | 4C21395E194205FB0048DD91 /* Products */,
41 | );
42 | sourceTree = "";
43 | };
44 | 4C21395E194205FB0048DD91 /* Products */ = {
45 | isa = PBXGroup;
46 | children = (
47 | 4C21395D194205FB0048DD91 /* SwiftTouchIDExample.app */,
48 | );
49 | name = Products;
50 | sourceTree = "";
51 | };
52 | 4C21395F194205FB0048DD91 /* SwiftTouchIDExample */ = {
53 | isa = PBXGroup;
54 | children = (
55 | 4C213962194205FB0048DD91 /* AppDelegate.swift */,
56 | 4C21397D194242AB0048DD91 /* MainViewController.swift */,
57 | 4C21397B194242440048DD91 /* MainStoryboard.storyboard */,
58 | 4C213964194205FB0048DD91 /* Images.xcassets */,
59 | 4C213960194205FB0048DD91 /* Supporting Files */,
60 | );
61 | path = SwiftTouchIDExample;
62 | sourceTree = "";
63 | };
64 | 4C213960194205FB0048DD91 /* Supporting Files */ = {
65 | isa = PBXGroup;
66 | children = (
67 | 4C213961194205FB0048DD91 /* Info.plist */,
68 | );
69 | name = "Supporting Files";
70 | sourceTree = "";
71 | };
72 | /* End PBXGroup section */
73 |
74 | /* Begin PBXNativeTarget section */
75 | 4C21395C194205FB0048DD91 /* SwiftTouchIDExample */ = {
76 | isa = PBXNativeTarget;
77 | buildConfigurationList = 4C213974194205FB0048DD91 /* Build configuration list for PBXNativeTarget "SwiftTouchIDExample" */;
78 | buildPhases = (
79 | 4C213959194205FB0048DD91 /* Sources */,
80 | 4C21395A194205FB0048DD91 /* Frameworks */,
81 | 4C21395B194205FB0048DD91 /* Resources */,
82 | );
83 | buildRules = (
84 | );
85 | dependencies = (
86 | );
87 | name = SwiftTouchIDExample;
88 | productName = SwiftTouchIDExample;
89 | productReference = 4C21395D194205FB0048DD91 /* SwiftTouchIDExample.app */;
90 | productType = "com.apple.product-type.application";
91 | };
92 | /* End PBXNativeTarget section */
93 |
94 | /* Begin PBXProject section */
95 | 4C213955194205FB0048DD91 /* Project object */ = {
96 | isa = PBXProject;
97 | attributes = {
98 | LastUpgradeCheck = 0600;
99 | ORGANIZATIONNAME = "Shmoopi LLC";
100 | TargetAttributes = {
101 | 4C21395C194205FB0048DD91 = {
102 | CreatedOnToolsVersion = 6.0;
103 | };
104 | };
105 | };
106 | buildConfigurationList = 4C213958194205FB0048DD91 /* Build configuration list for PBXProject "SwiftTouchIDExample" */;
107 | compatibilityVersion = "Xcode 3.2";
108 | developmentRegion = English;
109 | hasScannedForEncodings = 0;
110 | knownRegions = (
111 | en,
112 | );
113 | mainGroup = 4C213954194205FB0048DD91;
114 | productRefGroup = 4C21395E194205FB0048DD91 /* Products */;
115 | projectDirPath = "";
116 | projectRoot = "";
117 | targets = (
118 | 4C21395C194205FB0048DD91 /* SwiftTouchIDExample */,
119 | );
120 | };
121 | /* End PBXProject section */
122 |
123 | /* Begin PBXResourcesBuildPhase section */
124 | 4C21395B194205FB0048DD91 /* Resources */ = {
125 | isa = PBXResourcesBuildPhase;
126 | buildActionMask = 2147483647;
127 | files = (
128 | 4C21397C194242440048DD91 /* MainStoryboard.storyboard in Resources */,
129 | 4C213965194205FB0048DD91 /* Images.xcassets in Resources */,
130 | );
131 | runOnlyForDeploymentPostprocessing = 0;
132 | };
133 | /* End PBXResourcesBuildPhase section */
134 |
135 | /* Begin PBXSourcesBuildPhase section */
136 | 4C213959194205FB0048DD91 /* Sources */ = {
137 | isa = PBXSourcesBuildPhase;
138 | buildActionMask = 2147483647;
139 | files = (
140 | 4C213963194205FB0048DD91 /* AppDelegate.swift in Sources */,
141 | 4C21397E194242AB0048DD91 /* MainViewController.swift in Sources */,
142 | );
143 | runOnlyForDeploymentPostprocessing = 0;
144 | };
145 | /* End PBXSourcesBuildPhase section */
146 |
147 | /* Begin XCBuildConfiguration section */
148 | 4C213972194205FB0048DD91 /* Debug */ = {
149 | isa = XCBuildConfiguration;
150 | buildSettings = {
151 | ALWAYS_SEARCH_USER_PATHS = NO;
152 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
153 | CLANG_CXX_LIBRARY = "libc++";
154 | CLANG_ENABLE_MODULES = YES;
155 | CLANG_ENABLE_OBJC_ARC = YES;
156 | CLANG_WARN_BOOL_CONVERSION = YES;
157 | CLANG_WARN_CONSTANT_CONVERSION = YES;
158 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
159 | CLANG_WARN_EMPTY_BODY = YES;
160 | CLANG_WARN_ENUM_CONVERSION = YES;
161 | CLANG_WARN_INT_CONVERSION = YES;
162 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
163 | CLANG_WARN_UNREACHABLE_CODE = YES;
164 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
165 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
166 | COPY_PHASE_STRIP = NO;
167 | ENABLE_STRICT_OBJC_MSGSEND = YES;
168 | GCC_C_LANGUAGE_STANDARD = gnu99;
169 | GCC_DYNAMIC_NO_PIC = NO;
170 | GCC_OPTIMIZATION_LEVEL = 0;
171 | GCC_PREPROCESSOR_DEFINITIONS = (
172 | "DEBUG=1",
173 | "$(inherited)",
174 | );
175 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
176 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
177 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
178 | GCC_WARN_UNDECLARED_SELECTOR = YES;
179 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
180 | GCC_WARN_UNUSED_FUNCTION = YES;
181 | GCC_WARN_UNUSED_VARIABLE = YES;
182 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
183 | METAL_ENABLE_DEBUG_INFO = YES;
184 | ONLY_ACTIVE_ARCH = YES;
185 | SDKROOT = iphoneos;
186 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
187 | };
188 | name = Debug;
189 | };
190 | 4C213973194205FB0048DD91 /* Release */ = {
191 | isa = XCBuildConfiguration;
192 | buildSettings = {
193 | ALWAYS_SEARCH_USER_PATHS = NO;
194 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
195 | CLANG_CXX_LIBRARY = "libc++";
196 | CLANG_ENABLE_MODULES = YES;
197 | CLANG_ENABLE_OBJC_ARC = YES;
198 | CLANG_WARN_BOOL_CONVERSION = YES;
199 | CLANG_WARN_CONSTANT_CONVERSION = YES;
200 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
201 | CLANG_WARN_EMPTY_BODY = YES;
202 | CLANG_WARN_ENUM_CONVERSION = YES;
203 | CLANG_WARN_INT_CONVERSION = YES;
204 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
205 | CLANG_WARN_UNREACHABLE_CODE = YES;
206 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
207 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
208 | COPY_PHASE_STRIP = YES;
209 | ENABLE_NS_ASSERTIONS = NO;
210 | ENABLE_STRICT_OBJC_MSGSEND = YES;
211 | GCC_C_LANGUAGE_STANDARD = gnu99;
212 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
213 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
214 | GCC_WARN_UNDECLARED_SELECTOR = YES;
215 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
216 | GCC_WARN_UNUSED_FUNCTION = YES;
217 | GCC_WARN_UNUSED_VARIABLE = YES;
218 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
219 | METAL_ENABLE_DEBUG_INFO = NO;
220 | SDKROOT = iphoneos;
221 | VALIDATE_PRODUCT = YES;
222 | };
223 | name = Release;
224 | };
225 | 4C213975194205FB0048DD91 /* Debug */ = {
226 | isa = XCBuildConfiguration;
227 | buildSettings = {
228 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
229 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
230 | INFOPLIST_FILE = SwiftTouchIDExample/Info.plist;
231 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
232 | PRODUCT_NAME = "$(TARGET_NAME)";
233 | };
234 | name = Debug;
235 | };
236 | 4C213976194205FB0048DD91 /* Release */ = {
237 | isa = XCBuildConfiguration;
238 | buildSettings = {
239 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
240 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
241 | INFOPLIST_FILE = SwiftTouchIDExample/Info.plist;
242 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
243 | PRODUCT_NAME = "$(TARGET_NAME)";
244 | };
245 | name = Release;
246 | };
247 | /* End XCBuildConfiguration section */
248 |
249 | /* Begin XCConfigurationList section */
250 | 4C213958194205FB0048DD91 /* Build configuration list for PBXProject "SwiftTouchIDExample" */ = {
251 | isa = XCConfigurationList;
252 | buildConfigurations = (
253 | 4C213972194205FB0048DD91 /* Debug */,
254 | 4C213973194205FB0048DD91 /* Release */,
255 | );
256 | defaultConfigurationIsVisible = 0;
257 | defaultConfigurationName = Release;
258 | };
259 | 4C213974194205FB0048DD91 /* Build configuration list for PBXNativeTarget "SwiftTouchIDExample" */ = {
260 | isa = XCConfigurationList;
261 | buildConfigurations = (
262 | 4C213975194205FB0048DD91 /* Debug */,
263 | 4C213976194205FB0048DD91 /* Release */,
264 | );
265 | defaultConfigurationIsVisible = 0;
266 | defaultConfigurationName = Release;
267 | };
268 | /* End XCConfigurationList section */
269 | };
270 | rootObject = 4C213955194205FB0048DD91 /* Project object */;
271 | }
272 |
--------------------------------------------------------------------------------