├── Podfile ├── ios-app-particle-setup ├── Assets.xcassets │ ├── iTunesArtwork@1x.png │ ├── iTunesArtwork@2x.png │ ├── iTunesArtwork@3x.png │ └── AppIcon.appiconset │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-57x57@1x.png │ │ ├── Icon-App-57x57@2x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-72x72@1x.png │ │ ├── Icon-App-72x72@2x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ ├── ItunesArtwork@2x.png │ │ ├── Icon-Small-50x50@1x.png │ │ ├── Icon-Small-50x50@2x.png │ │ ├── Icon-App-83.5x83.5@2x.png │ │ └── Contents.json ├── Particle-Bridging-Header.h ├── Particle-SDK-Bridging-Header.h ├── Info.plist ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── ViewController.swift └── AppDelegate.swift ├── ios-app-particle-setup.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── ios-app-particle-setup.xcworkspace ├── xcshareddata │ └── IDEWorkspaceChecks.plist └── contents.xcworkspacedata ├── .gitignore ├── Podfile.lock ├── README.md └── LICENSE /Podfile: -------------------------------------------------------------------------------- 1 | target 'ios-app-particle-setup' do 2 | 3 | pod 'Particle-SDK' 4 | pod 'ParticleSetup' 5 | 6 | end 7 | -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/iTunesArtwork@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/iTunesArtwork@1x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/iTunesArtwork@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/iTunesArtwork@3x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/particle-iot/example-app-ios/HEAD/ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios-app-particle-setup.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios-app-particle-setup/Particle-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // ParticleSetup-Bridging-Header.h 3 | // 4 | 5 | #ifndef _ParticleSetup_Bridging_Header_h 6 | #define _ParticleSetup_Bridging_Header_h 7 | 8 | #include "ParticleSetup.h" 9 | #import "Particle-SDK.h" 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /ios-app-particle-setup.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios-app-particle-setup.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /ios-app-particle-setup/Particle-SDK-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Spark-SDK-Bridging-Header.h 3 | // Particle iOS Cloud SDK 4 | // 5 | // Created by Ido Kleinman 6 | // Copyright 2015 Particle 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | 20 | #ifndef Pods_Spark_SDK_Bridging_Header_h 21 | #define Pods_Spark_SDK_Bridging_Header_h 22 | 23 | #import "Particle-SDK.h" 24 | 25 | #endif 26 | -------------------------------------------------------------------------------- /ios-app-particle-setup/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - 1PasswordExtension (1.8.5) 3 | - AFNetworking (3.2.1): 4 | - AFNetworking/NSURLSession (= 3.2.1) 5 | - AFNetworking/Reachability (= 3.2.1) 6 | - AFNetworking/Security (= 3.2.1) 7 | - AFNetworking/Serialization (= 3.2.1) 8 | - AFNetworking/UIKit (= 3.2.1) 9 | - AFNetworking/NSURLSession (3.2.1): 10 | - AFNetworking/Reachability 11 | - AFNetworking/Security 12 | - AFNetworking/Serialization 13 | - AFNetworking/Reachability (3.2.1) 14 | - AFNetworking/Security (3.2.1) 15 | - AFNetworking/Serialization (3.2.1) 16 | - AFNetworking/UIKit (3.2.1): 17 | - AFNetworking/NSURLSession 18 | - Particle-SDK (0.8.1): 19 | - Particle-SDK/Helpers (= 0.8.1) 20 | - Particle-SDK/SDK (= 0.8.1) 21 | - Particle-SDK/Helpers (0.8.1): 22 | - AFNetworking (~> 3.0) 23 | - Particle-SDK/SDK (0.8.1): 24 | - AFNetworking (~> 3.0) 25 | - Particle-SDK/Helpers 26 | - ParticleSetup (0.9.0): 27 | - ParticleSetup/Comm (= 0.9.0) 28 | - ParticleSetup/Core (= 0.9.0) 29 | - ParticleSetup/Comm (0.9.0) 30 | - ParticleSetup/Core (0.9.0): 31 | - 1PasswordExtension 32 | - Particle-SDK 33 | - ParticleSetup/Comm 34 | 35 | DEPENDENCIES: 36 | - Particle-SDK 37 | - ParticleSetup 38 | 39 | SPEC REPOS: 40 | https://github.com/cocoapods/specs.git: 41 | - 1PasswordExtension 42 | - AFNetworking 43 | - Particle-SDK 44 | - ParticleSetup 45 | 46 | SPEC CHECKSUMS: 47 | 1PasswordExtension: 0e95bdea64ec8ff2f4f693be5467a09fac42a83d 48 | AFNetworking: b6f891fdfaed196b46c7a83cf209e09697b94057 49 | Particle-SDK: 3e91cf117f74b131216dfec15d8655ce9594821c 50 | ParticleSetup: 8a0b767d26c5c5d355f8b9929ba2d65a3a498313 51 | 52 | PODFILE CHECKSUM: cd4d3a886c8a6d599889ff5011d997b313551d2d 53 | 54 | COCOAPODS: 1.5.3 55 | -------------------------------------------------------------------------------- /ios-app-particle-setup/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ios-app-particle-setup/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // ios-app-particle-setup 4 | // 5 | // Created by Ido Kleinman on 3/9/18. 6 | // Copyright © 2018 Particle. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController, ParticleSetupMainControllerDelegate { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view, typically from a nib. 16 | } 17 | 18 | override func didReceiveMemoryWarning() { 19 | super.didReceiveMemoryWarning() 20 | // Dispose of any resources that can be recreated. 21 | } 22 | 23 | func particleSetupViewController(_ controller: ParticleSetupMainController!, didFinishWith result: ParticleSetupMainControllerResult, device: ParticleDevice!) { 24 | 25 | switch result 26 | { 27 | case .success: 28 | print("Setup completed successfully") 29 | case .failureConfigure: 30 | fallthrough 31 | case .failureCannotDisconnectFromDevice: 32 | fallthrough 33 | case .failureLostConnectionToDevice: 34 | fallthrough 35 | case .failureClaiming: 36 | print("Setup failed") 37 | case .userCancel : 38 | print("User cancelled setup") 39 | case .loggedIn : 40 | print("User is logged in") 41 | default: 42 | print("Uknown setup error") 43 | 44 | } 45 | 46 | if device != nil 47 | { 48 | device.getVariable("test", completion: { (value, err) -> Void in 49 | 50 | }) 51 | } 52 | } 53 | 54 | 55 | func particleSetupViewController(_ controller: ParticleSetupMainController!, didNotSucceeedWithDeviceID deviceID: String!) { 56 | print("Oh no setup failed") 57 | 58 | } 59 | 60 | 61 | @IBAction func startParticleSetup(_ sender: Any) { 62 | if let setupController = ParticleSetupMainController() 63 | { 64 | setupController.delegate = self //as! UIViewController & ParticleSetupMainControllerDelegate 65 | self.present(setupController, animated: true, completion: nil) 66 | } 67 | } 68 | 69 | } 70 | 71 | -------------------------------------------------------------------------------- /ios-app-particle-setup/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // ios-app-particle-setup 4 | // 5 | // Created by Ido Kleinman on 3/9/18. 6 | // Copyright © 2018 Particle. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 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 invalidate graphics rendering callbacks. 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 active 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # iOS Example App 2 | 3 | Barebones Swift iOS app showcasing basic ParticleSetup / Particle-SDK cocoapods usage / getting started. 4 | 5 | Built using XCode 9.4.1 (Swift 4) 6 | 7 | ### How to run the example? 8 | 9 | 1. Clone this repo 10 | 1. Open shell window and navigate to project folder 11 | 1. Run `pod install` 12 | 1. Open `ios-app-particle-setup.xcworkspace` and run the project on selected device or simulator 13 | 14 | ### How was it created? 15 | 16 | 1. Open XCode. File->New->Project->Single View App->Your project name 17 | 1. Create Podfile with your target name and Particle pods reference (see file) 18 | 1. Close XCode Project 19 | 1. Open shell window and navigate to the project folder 20 | 1. Run `pod install` (make sure your have latest [Cocoapods](https://guides.cocoapods.org/using/getting-started.html#installation) installed), pods will be installed and new XCode workspace file will be created. 21 | 1. in XCode open the new `.xcworkspace` 22 | 1. Add bridging header - see file `Particle-Bridging-Header.h` for reference. 23 | 1. Go to project settings->build settings->Objective-C bridging header->type in `.//Particle-Bridging-Header.h` (or wherever file is located). 24 | 1. Create the source code and storyboard for your app (see `ViewController.swift` and `Main.storyboard` for reference) 25 | 1. Build and run - works on simulator and device (no need to do any modifications to Keychain settings) 26 | 1. Click "Start setup" on the phone and onboard a new Photon to your account. 27 | 28 | ### Code 29 | 30 | ViewController invoking Particle setup must adhere to the `ParticleSetupMainControllerDelegate` protocol and implement (at least) the funcion `func particleSetupViewController(_ controller: ParticleSetupMainController!, didFinishWith result: ParticleSetupMainControllerResult, device: ParticleDevice!)`. 31 | 32 | To invoke setup: 33 | 34 | ``` 35 | if let setupController = ParticleSetupMainController() 36 | { 37 | setupController.delegate = self //as! UIViewController & ParticleSetupMainControllerDelegate 38 | self.present(setupController, animated: true, completion: nil) 39 | } 40 | ``` 41 | 42 | To reference the Particle cloud use: `ParticleCloud.sharedInstance()`, 43 | to reference a device use: `var device : ParticleDevice` or use a returned device instance from a cloud function like: 44 | 45 | ``` 46 | if device != nil 47 | { 48 | device.getVariable("test", completion: { (value, err) -> Void in 49 | print(value) 50 | }) 51 | } 52 | ``` 53 | 54 | For questions - refer to Particle mobile knowledgebase/community here: https://community.particle.io/c/mobile 55 | 56 | Good luck! 57 | -------------------------------------------------------------------------------- /ios-app-particle-setup/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /ios-app-particle-setup/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "57x57", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-57x57@1x.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "57x57", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-57x57@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "60x60", 59 | "idiom" : "iphone", 60 | "filename" : "Icon-App-60x60@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "60x60", 65 | "idiom" : "iphone", 66 | "filename" : "Icon-App-60x60@3x.png", 67 | "scale" : "3x" 68 | }, 69 | { 70 | "size" : "20x20", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-20x20@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "20x20", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-20x20@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "29x29", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-29x29@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "29x29", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-29x29@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "40x40", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-40x40@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "40x40", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-40x40@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-Small-50x50@1x.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "50x50", 113 | "idiom" : "ipad", 114 | "filename" : "Icon-Small-50x50@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "Icon-App-72x72@1x.png", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "size" : "72x72", 125 | "idiom" : "ipad", 126 | "filename" : "Icon-App-72x72@2x.png", 127 | "scale" : "2x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "Icon-App-76x76@1x.png", 133 | "scale" : "1x" 134 | }, 135 | { 136 | "size" : "76x76", 137 | "idiom" : "ipad", 138 | "filename" : "Icon-App-76x76@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "size" : "83.5x83.5", 143 | "idiom" : "ipad", 144 | "filename" : "Icon-App-83.5x83.5@2x.png", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "size" : "1024x1024", 149 | "idiom" : "ios-marketing", 150 | "filename" : "ItunesArtwork@2x.png", 151 | "scale" : "1x" 152 | } 153 | ], 154 | "info" : { 155 | "version" : 1, 156 | "author" : "xcode" 157 | } 158 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | 167 | -------------------------------------------------------------------------------- /ios-app-particle-setup.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0BE3D3E7D6AA5195DCA42572 /* libPods-ios-app-particle-setup.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ACA30137ED5ED3FFDD6CEB9D /* libPods-ios-app-particle-setup.a */; }; 11 | 50ECDCE22053505500DD243F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50ECDCE12053505500DD243F /* AppDelegate.swift */; }; 12 | 50ECDCE42053505500DD243F /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50ECDCE32053505500DD243F /* ViewController.swift */; }; 13 | 50ECDCE72053505500DD243F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50ECDCE52053505500DD243F /* Main.storyboard */; }; 14 | 50ECDCE92053505500DD243F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50ECDCE82053505500DD243F /* Assets.xcassets */; }; 15 | 50ECDCEC2053505500DD243F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50ECDCEA2053505500DD243F /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXFileReference section */ 19 | 50ECDCDE2053505500DD243F /* ios-app-particle-setup.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ios-app-particle-setup.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 20 | 50ECDCE12053505500DD243F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 21 | 50ECDCE32053505500DD243F /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 22 | 50ECDCE62053505500DD243F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 23 | 50ECDCE82053505500DD243F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 24 | 50ECDCEB2053505500DD243F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 25 | 50ECDCED2053505500DD243F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 26 | 50ECDCF32053506A00DD243F /* Podfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Podfile; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 27 | 50ECDCF4205352F100DD243F /* Particle-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Particle-Bridging-Header.h"; sourceTree = ""; }; 28 | 50ECDCF62053581F00DD243F /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 29 | ACA30137ED5ED3FFDD6CEB9D /* libPods-ios-app-particle-setup.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ios-app-particle-setup.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | B68D3A4F94A60DA6AFE62CD8 /* Pods-ios-app-particle-setup.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ios-app-particle-setup.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ios-app-particle-setup/Pods-ios-app-particle-setup.debug.xcconfig"; sourceTree = ""; }; 31 | CC218C226DD5BEB75A89E2FD /* Pods-ios-app-particle-setup.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ios-app-particle-setup.release.xcconfig"; path = "Pods/Target Support Files/Pods-ios-app-particle-setup/Pods-ios-app-particle-setup.release.xcconfig"; sourceTree = ""; }; 32 | /* End PBXFileReference section */ 33 | 34 | /* Begin PBXFrameworksBuildPhase section */ 35 | 50ECDCDB2053505500DD243F /* Frameworks */ = { 36 | isa = PBXFrameworksBuildPhase; 37 | buildActionMask = 2147483647; 38 | files = ( 39 | 0BE3D3E7D6AA5195DCA42572 /* libPods-ios-app-particle-setup.a in Frameworks */, 40 | ); 41 | runOnlyForDeploymentPostprocessing = 0; 42 | }; 43 | /* End PBXFrameworksBuildPhase section */ 44 | 45 | /* Begin PBXGroup section */ 46 | 14290A88549856411D6BFC37 /* Frameworks */ = { 47 | isa = PBXGroup; 48 | children = ( 49 | ACA30137ED5ED3FFDD6CEB9D /* libPods-ios-app-particle-setup.a */, 50 | ); 51 | name = Frameworks; 52 | sourceTree = ""; 53 | }; 54 | 50ECDCD52053505500DD243F = { 55 | isa = PBXGroup; 56 | children = ( 57 | 50ECDCF62053581F00DD243F /* README.md */, 58 | 50ECDCF32053506A00DD243F /* Podfile */, 59 | 50ECDCE02053505500DD243F /* ios-app-particle-setup */, 60 | 50ECDCDF2053505500DD243F /* Products */, 61 | 56F7304E22CFDDD388E85428 /* Pods */, 62 | 14290A88549856411D6BFC37 /* Frameworks */, 63 | ); 64 | sourceTree = ""; 65 | }; 66 | 50ECDCDF2053505500DD243F /* Products */ = { 67 | isa = PBXGroup; 68 | children = ( 69 | 50ECDCDE2053505500DD243F /* ios-app-particle-setup.app */, 70 | ); 71 | name = Products; 72 | sourceTree = ""; 73 | }; 74 | 50ECDCE02053505500DD243F /* ios-app-particle-setup */ = { 75 | isa = PBXGroup; 76 | children = ( 77 | 50ECDCF4205352F100DD243F /* Particle-Bridging-Header.h */, 78 | 50ECDCE12053505500DD243F /* AppDelegate.swift */, 79 | 50ECDCE32053505500DD243F /* ViewController.swift */, 80 | 50ECDCE52053505500DD243F /* Main.storyboard */, 81 | 50ECDCE82053505500DD243F /* Assets.xcassets */, 82 | 50ECDCEA2053505500DD243F /* LaunchScreen.storyboard */, 83 | 50ECDCED2053505500DD243F /* Info.plist */, 84 | ); 85 | path = "ios-app-particle-setup"; 86 | sourceTree = ""; 87 | }; 88 | 56F7304E22CFDDD388E85428 /* Pods */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | B68D3A4F94A60DA6AFE62CD8 /* Pods-ios-app-particle-setup.debug.xcconfig */, 92 | CC218C226DD5BEB75A89E2FD /* Pods-ios-app-particle-setup.release.xcconfig */, 93 | ); 94 | name = Pods; 95 | sourceTree = ""; 96 | }; 97 | /* End PBXGroup section */ 98 | 99 | /* Begin PBXNativeTarget section */ 100 | 50ECDCDD2053505500DD243F /* ios-app-particle-setup */ = { 101 | isa = PBXNativeTarget; 102 | buildConfigurationList = 50ECDCF02053505500DD243F /* Build configuration list for PBXNativeTarget "ios-app-particle-setup" */; 103 | buildPhases = ( 104 | 444AFDACDA47B5FA8023FDF0 /* [CP] Check Pods Manifest.lock */, 105 | 50ECDCDA2053505500DD243F /* Sources */, 106 | 50ECDCDB2053505500DD243F /* Frameworks */, 107 | 50ECDCDC2053505500DD243F /* Resources */, 108 | 42670595F2A52AAA4CAE2E23 /* [CP] Copy Pods Resources */, 109 | ); 110 | buildRules = ( 111 | ); 112 | dependencies = ( 113 | ); 114 | name = "ios-app-particle-setup"; 115 | productName = "ios-app-particle-setup"; 116 | productReference = 50ECDCDE2053505500DD243F /* ios-app-particle-setup.app */; 117 | productType = "com.apple.product-type.application"; 118 | }; 119 | /* End PBXNativeTarget section */ 120 | 121 | /* Begin PBXProject section */ 122 | 50ECDCD62053505500DD243F /* Project object */ = { 123 | isa = PBXProject; 124 | attributes = { 125 | LastSwiftUpdateCheck = 0920; 126 | LastUpgradeCheck = 0920; 127 | ORGANIZATIONNAME = Particle; 128 | TargetAttributes = { 129 | 50ECDCDD2053505500DD243F = { 130 | CreatedOnToolsVersion = 9.2; 131 | ProvisioningStyle = Automatic; 132 | }; 133 | }; 134 | }; 135 | buildConfigurationList = 50ECDCD92053505500DD243F /* Build configuration list for PBXProject "ios-app-particle-setup" */; 136 | compatibilityVersion = "Xcode 8.0"; 137 | developmentRegion = en; 138 | hasScannedForEncodings = 0; 139 | knownRegions = ( 140 | en, 141 | Base, 142 | ); 143 | mainGroup = 50ECDCD52053505500DD243F; 144 | productRefGroup = 50ECDCDF2053505500DD243F /* Products */; 145 | projectDirPath = ""; 146 | projectRoot = ""; 147 | targets = ( 148 | 50ECDCDD2053505500DD243F /* ios-app-particle-setup */, 149 | ); 150 | }; 151 | /* End PBXProject section */ 152 | 153 | /* Begin PBXResourcesBuildPhase section */ 154 | 50ECDCDC2053505500DD243F /* Resources */ = { 155 | isa = PBXResourcesBuildPhase; 156 | buildActionMask = 2147483647; 157 | files = ( 158 | 50ECDCEC2053505500DD243F /* LaunchScreen.storyboard in Resources */, 159 | 50ECDCE92053505500DD243F /* Assets.xcassets in Resources */, 160 | 50ECDCE72053505500DD243F /* Main.storyboard in Resources */, 161 | ); 162 | runOnlyForDeploymentPostprocessing = 0; 163 | }; 164 | /* End PBXResourcesBuildPhase section */ 165 | 166 | /* Begin PBXShellScriptBuildPhase section */ 167 | 42670595F2A52AAA4CAE2E23 /* [CP] Copy Pods Resources */ = { 168 | isa = PBXShellScriptBuildPhase; 169 | buildActionMask = 2147483647; 170 | files = ( 171 | ); 172 | inputPaths = ( 173 | "${SRCROOT}/Pods/Target Support Files/Pods-ios-app-particle-setup/Pods-ios-app-particle-setup-resources.sh", 174 | "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtensionResources.bundle", 175 | "${PODS_CONFIGURATION_BUILD_DIR}/ParticleSetup/ParticleSetup.bundle", 176 | ); 177 | name = "[CP] Copy Pods Resources"; 178 | outputPaths = ( 179 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/OnePasswordExtensionResources.bundle", 180 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ParticleSetup.bundle", 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | shellPath = /bin/sh; 184 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ios-app-particle-setup/Pods-ios-app-particle-setup-resources.sh\"\n"; 185 | showEnvVarsInLog = 0; 186 | }; 187 | 444AFDACDA47B5FA8023FDF0 /* [CP] Check Pods Manifest.lock */ = { 188 | isa = PBXShellScriptBuildPhase; 189 | buildActionMask = 2147483647; 190 | files = ( 191 | ); 192 | inputPaths = ( 193 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 194 | "${PODS_ROOT}/Manifest.lock", 195 | ); 196 | name = "[CP] Check Pods Manifest.lock"; 197 | outputPaths = ( 198 | "$(DERIVED_FILE_DIR)/Pods-ios-app-particle-setup-checkManifestLockResult.txt", 199 | ); 200 | runOnlyForDeploymentPostprocessing = 0; 201 | shellPath = /bin/sh; 202 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 203 | showEnvVarsInLog = 0; 204 | }; 205 | /* End PBXShellScriptBuildPhase section */ 206 | 207 | /* Begin PBXSourcesBuildPhase section */ 208 | 50ECDCDA2053505500DD243F /* Sources */ = { 209 | isa = PBXSourcesBuildPhase; 210 | buildActionMask = 2147483647; 211 | files = ( 212 | 50ECDCE42053505500DD243F /* ViewController.swift in Sources */, 213 | 50ECDCE22053505500DD243F /* AppDelegate.swift in Sources */, 214 | ); 215 | runOnlyForDeploymentPostprocessing = 0; 216 | }; 217 | /* End PBXSourcesBuildPhase section */ 218 | 219 | /* Begin PBXVariantGroup section */ 220 | 50ECDCE52053505500DD243F /* Main.storyboard */ = { 221 | isa = PBXVariantGroup; 222 | children = ( 223 | 50ECDCE62053505500DD243F /* Base */, 224 | ); 225 | name = Main.storyboard; 226 | sourceTree = ""; 227 | }; 228 | 50ECDCEA2053505500DD243F /* LaunchScreen.storyboard */ = { 229 | isa = PBXVariantGroup; 230 | children = ( 231 | 50ECDCEB2053505500DD243F /* Base */, 232 | ); 233 | name = LaunchScreen.storyboard; 234 | sourceTree = ""; 235 | }; 236 | /* End PBXVariantGroup section */ 237 | 238 | /* Begin XCBuildConfiguration section */ 239 | 50ECDCEE2053505500DD243F /* Debug */ = { 240 | isa = XCBuildConfiguration; 241 | buildSettings = { 242 | ALWAYS_SEARCH_USER_PATHS = NO; 243 | CLANG_ANALYZER_NONNULL = YES; 244 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 245 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 246 | CLANG_CXX_LIBRARY = "libc++"; 247 | CLANG_ENABLE_MODULES = YES; 248 | CLANG_ENABLE_OBJC_ARC = YES; 249 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 250 | CLANG_WARN_BOOL_CONVERSION = YES; 251 | CLANG_WARN_COMMA = YES; 252 | CLANG_WARN_CONSTANT_CONVERSION = YES; 253 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 254 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 255 | CLANG_WARN_EMPTY_BODY = YES; 256 | CLANG_WARN_ENUM_CONVERSION = YES; 257 | CLANG_WARN_INFINITE_RECURSION = YES; 258 | CLANG_WARN_INT_CONVERSION = YES; 259 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 260 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 261 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 262 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 263 | CLANG_WARN_STRICT_PROTOTYPES = YES; 264 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 265 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 266 | CLANG_WARN_UNREACHABLE_CODE = YES; 267 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 268 | CODE_SIGN_IDENTITY = "iPhone Developer"; 269 | COPY_PHASE_STRIP = NO; 270 | DEBUG_INFORMATION_FORMAT = dwarf; 271 | ENABLE_STRICT_OBJC_MSGSEND = YES; 272 | ENABLE_TESTABILITY = YES; 273 | GCC_C_LANGUAGE_STANDARD = gnu11; 274 | GCC_DYNAMIC_NO_PIC = NO; 275 | GCC_NO_COMMON_BLOCKS = YES; 276 | GCC_OPTIMIZATION_LEVEL = 0; 277 | GCC_PREPROCESSOR_DEFINITIONS = ( 278 | "DEBUG=1", 279 | "$(inherited)", 280 | ); 281 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 282 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 283 | GCC_WARN_UNDECLARED_SELECTOR = YES; 284 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 285 | GCC_WARN_UNUSED_FUNCTION = YES; 286 | GCC_WARN_UNUSED_VARIABLE = YES; 287 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 288 | MTL_ENABLE_DEBUG_INFO = YES; 289 | ONLY_ACTIVE_ARCH = YES; 290 | SDKROOT = iphoneos; 291 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 292 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 293 | }; 294 | name = Debug; 295 | }; 296 | 50ECDCEF2053505500DD243F /* Release */ = { 297 | isa = XCBuildConfiguration; 298 | buildSettings = { 299 | ALWAYS_SEARCH_USER_PATHS = NO; 300 | CLANG_ANALYZER_NONNULL = YES; 301 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 302 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 303 | CLANG_CXX_LIBRARY = "libc++"; 304 | CLANG_ENABLE_MODULES = YES; 305 | CLANG_ENABLE_OBJC_ARC = YES; 306 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 307 | CLANG_WARN_BOOL_CONVERSION = YES; 308 | CLANG_WARN_COMMA = YES; 309 | CLANG_WARN_CONSTANT_CONVERSION = YES; 310 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 311 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 312 | CLANG_WARN_EMPTY_BODY = YES; 313 | CLANG_WARN_ENUM_CONVERSION = YES; 314 | CLANG_WARN_INFINITE_RECURSION = YES; 315 | CLANG_WARN_INT_CONVERSION = YES; 316 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 317 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 318 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 319 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 320 | CLANG_WARN_STRICT_PROTOTYPES = YES; 321 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 322 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 323 | CLANG_WARN_UNREACHABLE_CODE = YES; 324 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 325 | CODE_SIGN_IDENTITY = "iPhone Developer"; 326 | COPY_PHASE_STRIP = NO; 327 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 328 | ENABLE_NS_ASSERTIONS = NO; 329 | ENABLE_STRICT_OBJC_MSGSEND = YES; 330 | GCC_C_LANGUAGE_STANDARD = gnu11; 331 | GCC_NO_COMMON_BLOCKS = YES; 332 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 333 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 334 | GCC_WARN_UNDECLARED_SELECTOR = YES; 335 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 336 | GCC_WARN_UNUSED_FUNCTION = YES; 337 | GCC_WARN_UNUSED_VARIABLE = YES; 338 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 339 | MTL_ENABLE_DEBUG_INFO = NO; 340 | SDKROOT = iphoneos; 341 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 342 | VALIDATE_PRODUCT = YES; 343 | }; 344 | name = Release; 345 | }; 346 | 50ECDCF12053505500DD243F /* Debug */ = { 347 | isa = XCBuildConfiguration; 348 | baseConfigurationReference = B68D3A4F94A60DA6AFE62CD8 /* Pods-ios-app-particle-setup.debug.xcconfig */; 349 | buildSettings = { 350 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 351 | CODE_SIGN_STYLE = Automatic; 352 | DEVELOPMENT_TEAM = TNJ67X9MQD; 353 | INFOPLIST_FILE = "ios-app-particle-setup/Info.plist"; 354 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 355 | PRODUCT_BUNDLE_IDENTIFIER = "io.particle.ios-app-particle-setup"; 356 | PRODUCT_NAME = "$(TARGET_NAME)"; 357 | SWIFT_OBJC_BRIDGING_HEADER = "./ios-app-particle-setup/Particle-Bridging-Header.h"; 358 | SWIFT_VERSION = 4.0; 359 | TARGETED_DEVICE_FAMILY = "1,2"; 360 | }; 361 | name = Debug; 362 | }; 363 | 50ECDCF22053505500DD243F /* Release */ = { 364 | isa = XCBuildConfiguration; 365 | baseConfigurationReference = CC218C226DD5BEB75A89E2FD /* Pods-ios-app-particle-setup.release.xcconfig */; 366 | buildSettings = { 367 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 368 | CODE_SIGN_STYLE = Automatic; 369 | DEVELOPMENT_TEAM = TNJ67X9MQD; 370 | INFOPLIST_FILE = "ios-app-particle-setup/Info.plist"; 371 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 372 | PRODUCT_BUNDLE_IDENTIFIER = "io.particle.ios-app-particle-setup"; 373 | PRODUCT_NAME = "$(TARGET_NAME)"; 374 | SWIFT_OBJC_BRIDGING_HEADER = "./ios-app-particle-setup/Particle-Bridging-Header.h"; 375 | SWIFT_VERSION = 4.0; 376 | TARGETED_DEVICE_FAMILY = "1,2"; 377 | }; 378 | name = Release; 379 | }; 380 | /* End XCBuildConfiguration section */ 381 | 382 | /* Begin XCConfigurationList section */ 383 | 50ECDCD92053505500DD243F /* Build configuration list for PBXProject "ios-app-particle-setup" */ = { 384 | isa = XCConfigurationList; 385 | buildConfigurations = ( 386 | 50ECDCEE2053505500DD243F /* Debug */, 387 | 50ECDCEF2053505500DD243F /* Release */, 388 | ); 389 | defaultConfigurationIsVisible = 0; 390 | defaultConfigurationName = Release; 391 | }; 392 | 50ECDCF02053505500DD243F /* Build configuration list for PBXNativeTarget "ios-app-particle-setup" */ = { 393 | isa = XCConfigurationList; 394 | buildConfigurations = ( 395 | 50ECDCF12053505500DD243F /* Debug */, 396 | 50ECDCF22053505500DD243F /* Release */, 397 | ); 398 | defaultConfigurationIsVisible = 0; 399 | defaultConfigurationName = Release; 400 | }; 401 | /* End XCConfigurationList section */ 402 | }; 403 | rootObject = 50ECDCD62053505500DD243F /* Project object */; 404 | } 405 | --------------------------------------------------------------------------------