├── BoxShareSDKSampleApp ├── Podfile ├── BoxShareSDKSampleApp.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── project.pbxproj ├── BoxShareSDKSampleApp.xcworkspace │ └── contents.xcworkspacedata ├── BoxShareSDKSampleApp │ ├── ViewController.h │ ├── AppDelegate.h │ ├── main.m │ ├── BOXSampleAppListViewController.h │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── ViewController.m │ ├── Info.plist │ ├── AppDelegate.m │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.xib │ └── BOXSampleAppListViewController.m ├── Podfile.lock └── BoxShareSDKSampleAppTests │ ├── Info.plist │ └── BoxShareSDKSampleAppTests.m ├── BoxShareSDK.framework ├── BoxShareSDK ├── Versions │ ├── A │ │ ├── BoxShareSDK │ │ └── Headers │ │ │ ├── BoxShareSDK.h │ │ │ ├── BOXCollaborationListViewController.h │ │ │ ├── BOXCollaborationRoleViewController.h │ │ │ └── BOXSharedLinkViewController.h │ └── Current │ │ ├── BoxShareSDK │ │ └── Headers │ │ ├── BoxShareSDK.h │ │ ├── BOXCollaborationListViewController.h │ │ ├── BOXCollaborationRoleViewController.h │ │ └── BOXSharedLinkViewController.h └── Headers │ ├── BoxShareSDK.h │ ├── BOXCollaborationListViewController.h │ ├── BOXCollaborationRoleViewController.h │ └── BOXSharedLinkViewController.h ├── BoxShareSDK └── BoxShareSDKResources │ ├── icon-folder.png │ ├── icon-file-blank.png │ ├── icon-folder@2x.png │ ├── icon-folder@3x.png │ ├── icon-hud-cross.png │ ├── icon-hud-error.png │ ├── icon-hud-cross@2x.png │ ├── icon-hud-cross@3x.png │ ├── icon-hud-error@2x.png │ ├── icon-hud-error@3x.png │ ├── icon-file-blank@2x.png │ ├── icon-file-blank@3x.png │ ├── icon_inline_access.png │ ├── icon_inline_download.png │ ├── icon_inline_password.png │ ├── icon-action-dark-share.png │ ├── icon_inline_access@2x.png │ ├── icon_inline_access@3x.png │ ├── icon_inline_expiration.png │ ├── icon-action-dark-share@2x.png │ ├── icon-action-dark-share@3x.png │ ├── icon-action-light-share.png │ ├── icon-empty-collaborator.png │ ├── icon_inline_download@2x.png │ ├── icon_inline_download@3x.png │ ├── icon_inline_expiration@2x.png │ ├── icon_inline_expiration@3x.png │ ├── icon_inline_password@2x.png │ ├── icon_inline_password@3x.png │ ├── icon-action-dark-viewcollab.png │ ├── icon-action-light-share@2x.png │ ├── icon-action-light-share@3x.png │ ├── icon-empty-collaborator@2x.png │ ├── icon-empty-collaborator@3x.png │ ├── icon-action-dark-invitecollab.png │ ├── icon-action-dark-viewcollab@2x.png │ ├── icon-action-dark-viewcollab@3x.png │ ├── icon-action-light-collaborate.png │ ├── icon-action-light-invitecollab.png │ ├── icon-action-light-viewcollab.png │ ├── icon-action-dark-invitecollab@2x.png │ ├── icon-action-dark-invitecollab@3x.png │ ├── icon-action-light-collaborate@2x.png │ ├── icon-action-light-collaborate@3x.png │ ├── icon-action-light-viewcollab@2x.png │ ├── icon-action-light-viewcollab@3x.png │ ├── icon-action-light-invitecollab@2x.png │ ├── icon-action-light-invitecollab@3x.png │ └── Info.plist ├── .gitignore ├── box-ios-share-sdk.podspec ├── ISSUE_TEMPLATE.md ├── README.md └── LICENSE /BoxShareSDKSampleApp/Podfile: -------------------------------------------------------------------------------- 1 | pod 'box-ios-share-sdk', :path => '../' 2 | -------------------------------------------------------------------------------- /BoxShareSDK.framework/BoxShareSDK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK.framework/BoxShareSDK -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/A/BoxShareSDK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK.framework/Versions/A/BoxShareSDK -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-folder.png -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/Current/BoxShareSDK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK.framework/Versions/Current/BoxShareSDK -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-file-blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-file-blank.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-folder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-folder@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-folder@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-folder@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-hud-cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-hud-cross.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-hud-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-hud-error.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-hud-cross@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-hud-cross@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-hud-cross@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-hud-cross@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-hud-error@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-hud-error@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-hud-error@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-hud-error@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-file-blank@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-file-blank@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-file-blank@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-file-blank@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_access.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_download.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_password.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-share.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_access@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_access@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_access@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_access@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_expiration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_expiration.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-share@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-share@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-share@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-share.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-empty-collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-empty-collaborator.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_download@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_download@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_download@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_download@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_expiration@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_expiration@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_expiration@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_expiration@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_password@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_password@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon_inline_password@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon_inline_password@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-viewcollab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-viewcollab.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-share@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-share@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-share@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-empty-collaborator@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-empty-collaborator@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-empty-collaborator@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-empty-collaborator@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-invitecollab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-invitecollab.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-viewcollab@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-viewcollab@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-viewcollab@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-viewcollab@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-collaborate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-collaborate.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-invitecollab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-invitecollab.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-viewcollab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-viewcollab.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-invitecollab@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-invitecollab@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-dark-invitecollab@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-dark-invitecollab@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-collaborate@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-collaborate@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-collaborate@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-collaborate@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-viewcollab@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-viewcollab@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-viewcollab@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-viewcollab@3x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-invitecollab@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-invitecollab@2x.png -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/icon-action-light-invitecollab@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/box/box-ios-share-sdk/master/BoxShareSDK/BoxShareSDKResources/icon-action-light-invitecollab@3x.png -------------------------------------------------------------------------------- /BoxShareSDK.framework/Headers/BoxShareSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // BoxShareSDK.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 Box. All rights reserved. 6 | // 7 | 8 | #import 9 | #import -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/A/Headers/BoxShareSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // BoxShareSDK.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 Box. All rights reserved. 6 | // 7 | 8 | #import 9 | #import -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/Current/Headers/BoxShareSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // BoxShareSDK.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 Box. All rights reserved. 6 | // 7 | 8 | #import 9 | #import -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // BoxShareSDKSampleApp 4 | // 5 | // Created on 1/20/15. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | - (IBAction)start:(id)sender; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // BoxShareSDKSampleApp 4 | // 5 | // Created on 1/20/15. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # osx noise 2 | .DS_Store 3 | profile 4 | 5 | # xcode noise 6 | BOXShareSDK/build/* 7 | build/* 8 | /build/* 9 | app/build/* 10 | *.mode1 11 | *.mode1v3 12 | *.mode2v3 13 | *.perspective 14 | *.perspectivev3 15 | *.pbxuser 16 | xcuserdata 17 | *.xccheckout 18 | 19 | # Box build artifacts 20 | buildArtifacts 21 | 22 | # Box localization files 23 | /output/* 24 | 25 | BoxShareSDKSampleApp/Pods 26 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // BoxShareSDKSampleApp 4 | // 5 | // Created by Tom Carpel on 1/20/15. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/BOXSampleAppListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXSampleAppListViewController.h 3 | // BoxShareSDKSampleApp 4 | // 5 | // Created on 1/29/15. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class BOXContentClient; 12 | @class BOXFolder; 13 | 14 | @interface BOXSampleAppListViewController : UITableViewController 15 | 16 | - (instancetype)initWithClient:(BOXContentClient *)client folderID:(NSString *)folderID; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - box-ios-sdk (1.0.5): 3 | - box-ios-sdk/logger (= 1.0.5) 4 | - box-ios-sdk/no-arc (= 1.0.5) 5 | - box-ios-sdk/logger (1.0.5) 6 | - box-ios-sdk/no-arc (1.0.5): 7 | - box-ios-sdk/logger 8 | - box-ios-share-sdk (1.0.1): 9 | - box-ios-sdk 10 | 11 | DEPENDENCIES: 12 | - box-ios-share-sdk (from `../`) 13 | 14 | EXTERNAL SOURCES: 15 | box-ios-share-sdk: 16 | :path: ../ 17 | 18 | SPEC CHECKSUMS: 19 | box-ios-sdk: 1fe3ae8550a35c67262c107940e6cdf30a6e8fed 20 | box-ios-share-sdk: 0cd50398eba13fc4dda405cca2f625cf40573678 21 | 22 | COCOAPODS: 0.37.2 23 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleAppTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.box.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /BoxShareSDK/BoxShareSDKResources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.box.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Box. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleAppTests/BoxShareSDKSampleAppTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // BoxShareSDKSampleAppTests.m 3 | // BoxShareSDKSampleAppTests 4 | // 5 | // Created by Tom Carpel on 1/20/15. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface BoxShareSDKSampleAppTests : XCTestCase 13 | 14 | @end 15 | 16 | @implementation BoxShareSDKSampleAppTests 17 | 18 | - (void)setUp { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown { 24 | // Put teardown code here. This method is called after the invocation of each test method in the class. 25 | [super tearDown]; 26 | } 27 | 28 | - (void)testExample { 29 | // This is an example of a functional test case. 30 | XCTAssert(YES, @"Pass"); 31 | } 32 | 33 | - (void)testPerformanceExample { 34 | // This is an example of a performance test case. 35 | [self measureBlock:^{ 36 | // Put the code you want to measure the time of here. 37 | }]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /box-ios-share-sdk.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | # Root specification 4 | 5 | s.name = "box-ios-share-sdk" 6 | s.version = "1.0.1" 7 | s.summary = "iOS Share SDK." 8 | s.homepage = "https://github.com/box/box-ios-share-sdk" 9 | s.license = { :type => "Apache 2.0", :file => "LICENSE" } 10 | s.author = "Box" 11 | s.source = { :git => "https://github.com/box/box-ios-share-sdk.git", :tag => "v#{s.version}" } 12 | 13 | # Platform 14 | 15 | s.ios.deployment_target = "7.0" 16 | 17 | # File patterns 18 | 19 | s.ios.source_files = "BoxShareSDK.framework/Versions/A/Headers/*.h" 20 | s.ios.vendored_frameworks = 'BoxShareSDK.framework' 21 | s.xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '$(inherited)' } 22 | s.preserve_paths = 'BoxShareSDK.framework' 23 | 24 | 25 | # Build settings 26 | s.requires_arc = true 27 | #s.ios.header_dir = "BOXShareSDK" 28 | 29 | s.dependency 'box-ios-sdk' 30 | 31 | s.resource_bundle = { 32 | 'BoxShareSDKResources' => [ 33 | 'BoxShareSDK/BoxShareSDKResources/*.*', 34 | ] 35 | } 36 | 37 | end 38 | -------------------------------------------------------------------------------- /BoxShareSDK.framework/Headers/BOXCollaborationListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXCollaborationListViewController.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 Box. All rights reserved. 6 | // 7 | 8 | #import "BoxContentSDK.h" 9 | 10 | #import 11 | 12 | @protocol BOXCollaborationItemRefreshDelegate; 13 | 14 | @interface BOXCollaborationListViewController : UITableViewController 15 | 16 | @property (nonatomic, readwrite, weak) id delegate; 17 | 18 | - (instancetype)initWithContentClient:(BOXContentClient *)client 19 | folderID:(NSString *)folderID; 20 | 21 | - (instancetype)initWithContentClient:(BOXContentClient *)client 22 | folder:(BOXFolder *)folder; 23 | 24 | @end 25 | 26 | @protocol BOXCollaborationItemRefreshDelegate 27 | 28 | @optional 29 | 30 | /** 31 | * Called when the view controller refreshes its list of collaborators 32 | * 33 | * @param folder The folder that the user is viewing collaborators for 34 | */ 35 | 36 | - (void)didRefreshCollaboratedFolder:(BOXFolder *)folder; 37 | 38 | /** 39 | * Called after the view controller fetched the collaborators for the folder 40 | * 41 | * @param collaborations An array of BOXCollaboration objects 42 | */ 43 | 44 | - (void)didFetchFolderCollaborations:(NSArray *)collaborations; 45 | 46 | @end -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | - [ ] I have checked that the [API documentation][api-docs] doesn't solve my issue 2 | 3 | ### Description of the Issue 4 | 5 | 6 | 7 | 8 | 9 | ### Versions Used 10 | Share SDK: 11 | iOS: 12 | 13 | ### Steps to Reproduce 14 | 15 | 16 | 17 | 18 | 19 | ### Error Message, Including Stack Trace 20 | 21 | 22 | 23 | [api-docs]: https://developer.box.com/docs 24 | -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/A/Headers/BOXCollaborationListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXCollaborationListViewController.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 Box. All rights reserved. 6 | // 7 | 8 | #import "BoxContentSDK.h" 9 | 10 | #import 11 | 12 | @protocol BOXCollaborationItemRefreshDelegate; 13 | 14 | @interface BOXCollaborationListViewController : UITableViewController 15 | 16 | @property (nonatomic, readwrite, weak) id delegate; 17 | 18 | - (instancetype)initWithContentClient:(BOXContentClient *)client 19 | folderID:(NSString *)folderID; 20 | 21 | - (instancetype)initWithContentClient:(BOXContentClient *)client 22 | folder:(BOXFolder *)folder; 23 | 24 | @end 25 | 26 | @protocol BOXCollaborationItemRefreshDelegate 27 | 28 | @optional 29 | 30 | /** 31 | * Called when the view controller refreshes its list of collaborators 32 | * 33 | * @param folder The folder that the user is viewing collaborators for 34 | */ 35 | 36 | - (void)didRefreshCollaboratedFolder:(BOXFolder *)folder; 37 | 38 | /** 39 | * Called after the view controller fetched the collaborators for the folder 40 | * 41 | * @param collaborations An array of BOXCollaboration objects 42 | */ 43 | 44 | - (void)didFetchFolderCollaborations:(NSArray *)collaborations; 45 | 46 | @end -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/Current/Headers/BOXCollaborationListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXCollaborationListViewController.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 Box. All rights reserved. 6 | // 7 | 8 | #import "BoxContentSDK.h" 9 | 10 | #import 11 | 12 | @protocol BOXCollaborationItemRefreshDelegate; 13 | 14 | @interface BOXCollaborationListViewController : UITableViewController 15 | 16 | @property (nonatomic, readwrite, weak) id delegate; 17 | 18 | - (instancetype)initWithContentClient:(BOXContentClient *)client 19 | folderID:(NSString *)folderID; 20 | 21 | - (instancetype)initWithContentClient:(BOXContentClient *)client 22 | folder:(BOXFolder *)folder; 23 | 24 | @end 25 | 26 | @protocol BOXCollaborationItemRefreshDelegate 27 | 28 | @optional 29 | 30 | /** 31 | * Called when the view controller refreshes its list of collaborators 32 | * 33 | * @param folder The folder that the user is viewing collaborators for 34 | */ 35 | 36 | - (void)didRefreshCollaboratedFolder:(BOXFolder *)folder; 37 | 38 | /** 39 | * Called after the view controller fetched the collaborators for the folder 40 | * 41 | * @param collaborations An array of BOXCollaboration objects 42 | */ 43 | 44 | - (void)didFetchFolderCollaborations:(NSArray *)collaborations; 45 | 46 | @end -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/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" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // BoxShareSDKSampleApp 4 | // 5 | // Created on 1/20/15. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "BoxContentSDK.h" 11 | #import "BOXSampleAppListViewController.h" 12 | 13 | @interface ViewController () 14 | 15 | @end 16 | 17 | @implementation ViewController 18 | 19 | - (void)viewDidLoad 20 | { 21 | [super viewDidLoad]; 22 | // Do any additional setup after loading the view, typically from a nib. 23 | } 24 | 25 | - (void)didReceiveMemoryWarning 26 | { 27 | [super didReceiveMemoryWarning]; 28 | // Dispose of any resources that can be recreated. 29 | } 30 | 31 | - (IBAction)start:(id)sender 32 | { 33 | #error Set the client ID and client secret that can be retrieved by creating an application at http://developers.box.com 34 | [BOXContentClient setClientID:@"client_id" clientSecret:@"client_secret"]; 35 | BOXContentClient *client = [BOXContentClient defaultClient]; 36 | [client authenticateWithCompletionBlock:^(BOXUser *user, NSError *error) { 37 | if (error == nil) { 38 | BOXSampleAppListViewController *listController = [[BOXSampleAppListViewController alloc] initWithClient:client folderID:@"0"]; 39 | UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:listController]; 40 | [self presentViewController:navigationController animated:YES completion:nil]; 41 | } 42 | }]; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.box.$(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 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /BoxShareSDK.framework/Headers/BOXCollaborationRoleViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXCollaborationRoleViewController.h 3 | // BOXShareSDK 4 | // 5 | // Created on 1/22/2015. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import "BoxContentSDKConstants.h" 10 | 11 | #import 12 | 13 | @class BOXCollaboration; 14 | @class BOXFolder; 15 | @class BOXUserMini; 16 | 17 | @protocol BOXCollaborationRoleViewControllerDelegate; 18 | 19 | @interface BOXCollaborationRoleViewController : UITableViewController 20 | 21 | @property (nonatomic, readwrite, weak) id delegate; 22 | @property (nonatomic, readonly, strong) BOXCollaboration *collaboration; 23 | 24 | + (NSString *)localizedTitleForCollaborationRole:(BOXCollaborationRole *)role; 25 | + (NSString *)localizedDescriptionForCollaborationRole:(BOXCollaborationRole *)role; 26 | 27 | - (id)initWithCollaboration:(BOXCollaboration *)collaboration 28 | folder:(BOXFolder *)folder 29 | currentUser:(BOXUserMini *)currentUser 30 | currentUserRole:(BOXCollaborationRole *)currentUserRole 31 | isNewCollaboration:(BOOL)isNew; 32 | 33 | @end 34 | 35 | @protocol BOXCollaborationRoleViewControllerDelegate 36 | 37 | @optional 38 | 39 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didSelectNewRole:(BOXCollaborationRole *)newRole; 40 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didSelectToRemoveCollaboration:(BOXCollaboration *)collaboration; 41 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didDisappearWithSelectedRole:(BOXCollaborationRole *)newRole; 42 | 43 | @end -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/A/Headers/BOXCollaborationRoleViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXCollaborationRoleViewController.h 3 | // BOXShareSDK 4 | // 5 | // Created on 1/22/2015. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import "BoxContentSDKConstants.h" 10 | 11 | #import 12 | 13 | @class BOXCollaboration; 14 | @class BOXFolder; 15 | @class BOXUserMini; 16 | 17 | @protocol BOXCollaborationRoleViewControllerDelegate; 18 | 19 | @interface BOXCollaborationRoleViewController : UITableViewController 20 | 21 | @property (nonatomic, readwrite, weak) id delegate; 22 | @property (nonatomic, readonly, strong) BOXCollaboration *collaboration; 23 | 24 | + (NSString *)localizedTitleForCollaborationRole:(BOXCollaborationRole *)role; 25 | + (NSString *)localizedDescriptionForCollaborationRole:(BOXCollaborationRole *)role; 26 | 27 | - (id)initWithCollaboration:(BOXCollaboration *)collaboration 28 | folder:(BOXFolder *)folder 29 | currentUser:(BOXUserMini *)currentUser 30 | currentUserRole:(BOXCollaborationRole *)currentUserRole 31 | isNewCollaboration:(BOOL)isNew; 32 | 33 | @end 34 | 35 | @protocol BOXCollaborationRoleViewControllerDelegate 36 | 37 | @optional 38 | 39 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didSelectNewRole:(BOXCollaborationRole *)newRole; 40 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didSelectToRemoveCollaboration:(BOXCollaboration *)collaboration; 41 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didDisappearWithSelectedRole:(BOXCollaborationRole *)newRole; 42 | 43 | @end -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/Current/Headers/BOXCollaborationRoleViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXCollaborationRoleViewController.h 3 | // BOXShareSDK 4 | // 5 | // Created on 1/22/2015. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import "BoxContentSDKConstants.h" 10 | 11 | #import 12 | 13 | @class BOXCollaboration; 14 | @class BOXFolder; 15 | @class BOXUserMini; 16 | 17 | @protocol BOXCollaborationRoleViewControllerDelegate; 18 | 19 | @interface BOXCollaborationRoleViewController : UITableViewController 20 | 21 | @property (nonatomic, readwrite, weak) id delegate; 22 | @property (nonatomic, readonly, strong) BOXCollaboration *collaboration; 23 | 24 | + (NSString *)localizedTitleForCollaborationRole:(BOXCollaborationRole *)role; 25 | + (NSString *)localizedDescriptionForCollaborationRole:(BOXCollaborationRole *)role; 26 | 27 | - (id)initWithCollaboration:(BOXCollaboration *)collaboration 28 | folder:(BOXFolder *)folder 29 | currentUser:(BOXUserMini *)currentUser 30 | currentUserRole:(BOXCollaborationRole *)currentUserRole 31 | isNewCollaboration:(BOOL)isNew; 32 | 33 | @end 34 | 35 | @protocol BOXCollaborationRoleViewControllerDelegate 36 | 37 | @optional 38 | 39 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didSelectNewRole:(BOXCollaborationRole *)newRole; 40 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didSelectToRemoveCollaboration:(BOXCollaboration *)collaboration; 41 | - (void)collaborationRoleViewController:(BOXCollaborationRoleViewController *)controller didDisappearWithSelectedRole:(BOXCollaborationRole *)newRole; 42 | 43 | @end -------------------------------------------------------------------------------- /BoxShareSDK.framework/Headers/BOXSharedLinkViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXSharedLinkViewController.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 BOX. All rights reserved. 6 | // 7 | 8 | #import 9 | #import "BoxContentSDK.h" 10 | 11 | @protocol BOXSharedLinkViewControllerDelegate; 12 | 13 | @interface BOXSharedLinkViewController : UITableViewController 14 | 15 | - (instancetype)initWithContentClient:(BOXContentClient *)client 16 | withItem:(BOXItem *)item; 17 | 18 | - (instancetype)initWithContentClient:(BOXContentClient *)client 19 | fileID:(NSString *)fileID; 20 | 21 | - (instancetype)initWithContentClient:(BOXContentClient *)client 22 | folderID:(NSString *)folderID; 23 | 24 | - (instancetype)initWithContentClient:(BOXContentClient *)client 25 | bookmarkID:(NSString *)bookmarkID; 26 | 27 | /** 28 | * Defaults to NO. If NO, a button will be shown to allow users to copy a shared link URL to the device's clipboard. 29 | */ 30 | @property (nonatomic, readwrite, assign) BOOL shouldHideCopyToClipboard; 31 | 32 | /** 33 | * Defaults to NO. If NO, a button will be shown to allow users to email or message a shared link URL. 34 | */ 35 | @property (nonatomic, readwrite, assign) BOOL shouldHideSendLinks; 36 | 37 | @property (nonatomic, readwrite, weak) id delegate; 38 | 39 | @end 40 | 41 | @protocol BOXSharedLinkViewControllerDelegate 42 | 43 | @optional 44 | 45 | /** 46 | * Implement to respond to the item's shared link being updated/removed 47 | * 48 | * @param controller The BOXSharedLinkViewController the change occured on 49 | * 50 | * @param item The BOXItem that was modified 51 | */ 52 | 53 | - (void)sharedLinkViewController:(BOXSharedLinkViewController *)controller didUpdateItem:(BOXItem *)item; 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/A/Headers/BOXSharedLinkViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXSharedLinkViewController.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 BOX. All rights reserved. 6 | // 7 | 8 | #import 9 | #import "BoxContentSDK.h" 10 | 11 | @protocol BOXSharedLinkViewControllerDelegate; 12 | 13 | @interface BOXSharedLinkViewController : UITableViewController 14 | 15 | - (instancetype)initWithContentClient:(BOXContentClient *)client 16 | withItem:(BOXItem *)item; 17 | 18 | - (instancetype)initWithContentClient:(BOXContentClient *)client 19 | fileID:(NSString *)fileID; 20 | 21 | - (instancetype)initWithContentClient:(BOXContentClient *)client 22 | folderID:(NSString *)folderID; 23 | 24 | - (instancetype)initWithContentClient:(BOXContentClient *)client 25 | bookmarkID:(NSString *)bookmarkID; 26 | 27 | /** 28 | * Defaults to NO. If NO, a button will be shown to allow users to copy a shared link URL to the device's clipboard. 29 | */ 30 | @property (nonatomic, readwrite, assign) BOOL shouldHideCopyToClipboard; 31 | 32 | /** 33 | * Defaults to NO. If NO, a button will be shown to allow users to email or message a shared link URL. 34 | */ 35 | @property (nonatomic, readwrite, assign) BOOL shouldHideSendLinks; 36 | 37 | @property (nonatomic, readwrite, weak) id delegate; 38 | 39 | @end 40 | 41 | @protocol BOXSharedLinkViewControllerDelegate 42 | 43 | @optional 44 | 45 | /** 46 | * Implement to respond to the item's shared link being updated/removed 47 | * 48 | * @param controller The BOXSharedLinkViewController the change occured on 49 | * 50 | * @param item The BOXItem that was modified 51 | */ 52 | 53 | - (void)sharedLinkViewController:(BOXSharedLinkViewController *)controller didUpdateItem:(BOXItem *)item; 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /BoxShareSDK.framework/Versions/Current/Headers/BOXSharedLinkViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BOXSharedLinkViewController.h 3 | // BoxShareSDK 4 | // 5 | // Copyright (c) 2015 BOX. All rights reserved. 6 | // 7 | 8 | #import 9 | #import "BoxContentSDK.h" 10 | 11 | @protocol BOXSharedLinkViewControllerDelegate; 12 | 13 | @interface BOXSharedLinkViewController : UITableViewController 14 | 15 | - (instancetype)initWithContentClient:(BOXContentClient *)client 16 | withItem:(BOXItem *)item; 17 | 18 | - (instancetype)initWithContentClient:(BOXContentClient *)client 19 | fileID:(NSString *)fileID; 20 | 21 | - (instancetype)initWithContentClient:(BOXContentClient *)client 22 | folderID:(NSString *)folderID; 23 | 24 | - (instancetype)initWithContentClient:(BOXContentClient *)client 25 | bookmarkID:(NSString *)bookmarkID; 26 | 27 | /** 28 | * Defaults to NO. If NO, a button will be shown to allow users to copy a shared link URL to the device's clipboard. 29 | */ 30 | @property (nonatomic, readwrite, assign) BOOL shouldHideCopyToClipboard; 31 | 32 | /** 33 | * Defaults to NO. If NO, a button will be shown to allow users to email or message a shared link URL. 34 | */ 35 | @property (nonatomic, readwrite, assign) BOOL shouldHideSendLinks; 36 | 37 | @property (nonatomic, readwrite, weak) id delegate; 38 | 39 | @end 40 | 41 | @protocol BOXSharedLinkViewControllerDelegate 42 | 43 | @optional 44 | 45 | /** 46 | * Implement to respond to the item's shared link being updated/removed 47 | * 48 | * @param controller The BOXSharedLinkViewController the change occured on 49 | * 50 | * @param item The BOXItem that was modified 51 | */ 52 | 53 | - (void)sharedLinkViewController:(BOXSharedLinkViewController *)controller didUpdateItem:(BOXItem *)item; 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // BoxShareSDKSampleApp 4 | // 5 | // Created on 1/20/15. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // 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. 25 | // 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. 26 | } 27 | 28 | - (void)applicationDidEnterBackground:(UIApplication *)application { 29 | // 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. 30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 31 | } 32 | 33 | - (void)applicationWillEnterForeground:(UIApplication *)application { 34 | // 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. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application { 38 | // 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. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application { 42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Project Status](http://opensource.box.com/badges/active.svg)](http://opensource.box.com/badges) 2 | 3 | Box iOS Share SDK 4 | =================== 5 | 6 | ##Note: 7 | 8 | - The Box iOS Share SDK is in **Maintenance** mode. This means only critical bugs will be patched. However, new functionality and additional bug fixes may be added on occasion based on customer demand, but should not be expected. 9 | 10 | This SDK allows you to show UI that allows users to view collaborators for their folders or create shared links for their items on BOX. 11 | 12 | Developer Setup 13 | --------------- 14 | * Ensure you have the latest version of [XCode](https://developer.apple.com/xcode/) installed. 15 | * We encourage you to use [Cocoa Pods](http://cocoapods.org/) to import the SDK into your project. Cocoa Pods is a simple, but powerful dependency management tool. If you do not already use Cocoa Pods, it's very easy to [get started](http://guides.cocoapods.org/using/getting-started.html). 16 | 17 | Quickstart 18 | ---------- 19 | Step 1: Add to your Podfile 20 | ``` 21 | pod 'box-ios-share-sdk' 22 | ``` 23 | Step 2: Install 24 | ``` 25 | pod install 26 | ``` 27 | Step 3: Import 28 | ```objectivec 29 | #import 30 | ``` 31 | Step 4: Set the Box Client ID and Client Secret that you obtain from [creating a developer account](http://developers.box.com/) 32 | ```objectivec 33 | [BOXContentClient setClientID:@"your-client-id" clientSecret:@"your-client-secret"]; 34 | ``` 35 | Step 5: Launch a BOXSharedLinkViewController 36 | ```objectivec 37 | BOXContentClient *contentClient = [BOXContentClient defaultClient]; 38 | BOXSharedLinkViewController *sharedLinkViewController = [[BOXSharedLinkViewController alloc] initWithContentClient:contentClient fileID:@"123"]; 39 | 40 | // You must push it to a UINavigationController (i.e. do not 'presentViewController') 41 | UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:sharedLinkViewController]; 42 | [self presentViewController:navigationController animated:YES completion:nil]; 43 | ``` 44 | 45 | Sample App 46 | ---------- 47 | A sample app can be found in the [BoxShareSDKSampleApp](../../tree/master/BoxShareSDKSampleApp) folder. To execute the sample app: 48 | Step 1: Install Pods 49 | ``` 50 | cd BoxShareSDKSampleApp 51 | pod install 52 | ``` 53 | Step 2: Open Workspace 54 | ``` 55 | open BoxShareSDKSampleApp.xcworkspace 56 | ``` 57 | 58 | 59 | Copyright and License 60 | --------------------- 61 | Copyright 2015 Box, Inc. All rights reserved. 62 | 63 | Licensed under the Box Terms of Service; you may not use this file except in compliance with the License. 64 | You may obtain a copy of the License at https://www.box.com/legal/termsofservice/​ 65 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp/BOXSampleAppListViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BOXSampleAppListViewController.m 3 | // BoxShareSDKSampleApp 4 | // 5 | // Created on 1/29/15. 6 | // Copyright (c) 2015 Box. All rights reserved. 7 | // 8 | 9 | #import "BOXSampleAppListViewController.h" 10 | 11 | #import "BoxContentSDK.h" 12 | #import "BOXCollaborationListViewController.h" 13 | #import "BOXSharedLinkViewController.h" 14 | 15 | @interface BOXSampleAppListViewController () 16 | 17 | @property (nonatomic, readwrite, strong) BOXContentClient *client; 18 | @property (nonatomic, readwrite, strong) NSString *folderID; 19 | @property (nonatomic, readwrite, strong) BOXFolder *folder; 20 | 21 | @property (nonatomic, readwrite, strong) NSArray *items; 22 | 23 | @end 24 | 25 | @implementation BOXSampleAppListViewController 26 | 27 | - (instancetype)initWithClient:(BOXContentClient *)client folderID:(NSString *)folderID 28 | { 29 | if (self = [super init]) { 30 | _client = client; 31 | _folderID = folderID; 32 | } 33 | 34 | return self; 35 | } 36 | 37 | - (void)viewDidLoad 38 | { 39 | [super viewDidLoad]; 40 | 41 | // Uncomment the following line to preserve selection between presentations. 42 | // self.clearsSelectionOnViewWillAppear = NO; 43 | 44 | // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 45 | // self.navigationItem.rightBarButtonItem = self.editButtonItem; 46 | 47 | BOXFolderRequest *request = [self.client folderInfoRequestWithID:self.folderID]; 48 | request.requestAllFolderFields = YES; 49 | [request performRequestWithCompletion:^(BOXFolder *folder, NSError *error) { 50 | self.folder = folder; 51 | self.navigationItem.title = self.folder.name; 52 | 53 | if ([self.folder isRoot]) { 54 | UIBarButtonItem *logoutItem = [[UIBarButtonItem alloc] initWithTitle:@"Log Out" 55 | style:UIBarButtonItemStylePlain 56 | target:self 57 | action:@selector(logOut:)]; 58 | self.navigationItem.leftBarButtonItem = logoutItem; 59 | } 60 | }]; 61 | 62 | UIBarButtonItem *invite = [[UIBarButtonItem alloc] initWithTitle:@"Invite" style:UIBarButtonItemStyleBordered target:self action:@selector(invite:)]; 63 | UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithTitle:@"Share" style:UIBarButtonItemStyleBordered target:self action:@selector(share:)]; 64 | 65 | self.navigationItem.rightBarButtonItems = @[invite, share]; 66 | } 67 | 68 | - (void)viewWillAppear:(BOOL)animated 69 | { 70 | [super viewWillAppear:animated]; 71 | 72 | BOXFolderItemsRequest *request = [self.client folderItemsRequestWithID:self.folderID]; 73 | [request performRequestWithCompletion:^(NSArray *items, NSError *error) { 74 | self.items = items; 75 | [self.tableView reloadData]; 76 | }]; 77 | } 78 | 79 | - (void)didReceiveMemoryWarning 80 | { 81 | [super didReceiveMemoryWarning]; 82 | // Dispose of any resources that can be recreated. 83 | } 84 | 85 | #pragma mark - Table view data source 86 | 87 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 88 | { 89 | // Return the number of sections. 90 | return 1; 91 | } 92 | 93 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 94 | { 95 | // Return the number of rows in the section. 96 | return [self.items count]; 97 | } 98 | 99 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 100 | { 101 | static NSString *CellIdentifier = @"CellIdentifier"; 102 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 103 | 104 | if (cell == nil) { 105 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 106 | } 107 | 108 | // Configure the cell... 109 | BOXItem *currentItem = (BOXItem *)self.items[indexPath.row]; 110 | cell.textLabel.text = currentItem.name; 111 | cell.detailTextLabel.text = [currentItem isFolder] ? @"Folder" : @"Item"; 112 | 113 | return cell; 114 | } 115 | 116 | #pragma mark - Table view delegate 117 | 118 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 119 | { 120 | BOXItem *selectedItem = (BOXItem *)self.items[indexPath.row]; 121 | 122 | if ([selectedItem isFolder]) { 123 | BOXSampleAppListViewController *newListViewController = [[BOXSampleAppListViewController alloc] initWithClient:self.client folderID:selectedItem.modelID]; 124 | [self.navigationController pushViewController:newListViewController animated:YES]; 125 | } else { 126 | BOXSharedLinkViewController *shareController = [[BOXSharedLinkViewController alloc] initWithContentClient:self.client withItem:selectedItem]; 127 | [self.navigationController pushViewController:shareController animated:YES]; 128 | } 129 | 130 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 131 | } 132 | 133 | #pragma mark - Actions 134 | 135 | - (void)invite:(id)source 136 | { 137 | BOXCollaborationListViewController *collaborationController = [[BOXCollaborationListViewController alloc] initWithContentClient:self.client folderID:self.folder.modelID]; 138 | [self.navigationController pushViewController:collaborationController animated:YES]; 139 | } 140 | 141 | - (void)share:(id)source 142 | { 143 | BOXSharedLinkViewController *shareController = [[BOXSharedLinkViewController alloc] initWithContentClient:self.client withItem:self.folder]; 144 | [self.navigationController pushViewController:shareController animated:YES]; 145 | } 146 | 147 | //FIXME: Add handling of logout notification 148 | - (void)logOut:(id)source 149 | { 150 | [self.client logOut]; 151 | [self dismissViewControllerAnimated:YES completion:nil]; 152 | } 153 | 154 | @end 155 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2015 Box, Inc. All rights reserved. 2 | Licensed under the Box Terms of Service; 3 | you may not use this software except in compliance with the License. 4 | You may obtain a copy of the License at https://www.box.com/legal/termsofservice/ 5 | 6 | Box Terms of Service 7 | 8 | Last Updated: July 1, 2014 9 | 10 | Welcome to Box. Please read these terms of service (these "Terms") carefully as they form a contract between you and the Box entity listed in Section 17 of these Terms ("Box", "we", "us", or "our") that governs your access and use of the hosted storage solution provided by Box for online content storage, sharing and processing of files, materials, data, text, audio, video, images or other content (collectively, "Content"); (ii) the Box websites or applications; and (iii) any written or electronic use or features guides or other documentation provided or made available by Box (the "User Guides") (collectively the "Service(s)"). 11 | 12 | By registering or using any of the Services you agree to be bound by these Terms. If you are using the Services on behalf of an organization, you are agreeing to these Terms for that organization and promising to Box that you have the authority to bind that organization to these Terms (in which event, "you" and "your" will refer to that organization) unless that organization has a separate paid contract in effect with us, in which event the terms of that contract will govern your use of the Service. You may use the Services only in compliance with these Terms and only if you have the power to form a contract with Box and are not barred under any applicable laws from doing so. IF YOU DO NOT AGREE TO BE BOUND BY THESE TERMS, YOU MUST NOT USE THE SERVICES. Should you have any questions concerning this Agreement, please contact saleslegal@box.com 13 | 14 | Please note that Box doesn't provide warranties for the Services. This contract also limits our liability to you. See Sections 14 (NO WARRANTY) and 16 (LIMITATION OF LIABILITY) of these Terms for details. 15 | 16 | 1. CHANGES TO THESE TERMS 17 | 18 | We reserve the right to revise these Terms from time to time. We will date and post the most current version of these Terms on the Box website. Any changes will be effective upon posting the revised version of these Terms (or such later effective date as may be indicated at the top of the revised Terms). If in our sole discretion we deem a revision to these Terms to be material, we will notify you via the Service and/or by email to the email address associated with your account. Notice of other changes may be provided via www.box.com (the “Site”) or related Box blogs. Therefore, we encourage you to check the date of these Terms whenever you visit the Site to see if these Terms have been updated. Your continued access or use of any portion of the Service constitutes your acceptance of such changes. If you don't agree to any of the changes, we're not obligated to keep providing the Service, and you must cancel and stop using the Service. 19 | 20 | 2. ACCESS TO THE SERVICE 21 | 22 | You may use the Service, on a non-exclusive basis, solely in strict compliance with these Terms and all applicable laws 23 | 24 | 3. YOUR ACCOUNT 25 | 26 | To obtain access to certain Services, you may be required to obtain an account with Box (become a "Registered User"), by completing a registration form and designating a user ID and password. Until you apply for and are approved for an account your access to the Service will be limited to the areas of the Service, if any, that Box makes available to the general public. When registering with Box you must: (a) provide true, accurate, current and complete information about yourself as requested by the Service's registration form (such information being the "Registration Data"); and (b) maintain and promptly update the Registration Data to keep it true, accurate, current and complete. Box may deny approval or withdraw such approval at any time in its sole discretion, with or without cause. 27 | 28 | Only you may use your Box account. You must keep your account and passwords confidential and not authorize any third party to access or use the Service on your behalf, unless we provide an approved mechanism for such use. Box will not be liable for any loss or damage arising from any unauthorized use of your accounts. 29 | 30 | If a third party such as an employer, or school gave you your account, that party has rights to your account and may: manage your account, reset your password, or suspend or cancel your account; view your account's usage and profile data, including how and when your account is used; and read or store Content in your account. If you are an individual Registered User of the Service, and the domain of the primary email address associated with your account is owned by an organization and was assigned to you as an employee, contractor or member of such organization, and that organization wishes to establishes a commercial relationship with us and add your account to such relationship, then, if you do not change the email address associated with your account, your account may become subject to the commercial relationship between Box and such organization and controlled by such organization. 31 | 32 | 4. CONSENT TO ELECTRONIC COMMUNICATIONS AND SOLICITATION 33 | 34 | By registering with Box, you understand that we may send you communications or data regarding the Services, including but not limited to: (a) notices about your use of the Services, including any notices concerning violations of use; (b) updates; and (c) promotional information and materials regarding Box's products and services, via electronic mail. We give you the opportunity to opt-out of receiving promotional electronic mail from us by following the opt-out instructions provided in the message. 35 | 36 | 5. CONTENT 37 | 38 | Except for material that we license to you, we don't claim ownership of any Content that is transmitted, stored, or processed in your account(s). We also don't control, verify, or endorse the Content that you and others make available on the Service. 39 | 40 | We provide functions that allow you to control who may access your Content. If you enable the features that allow you to share the Content with others, anyone you've shared Content with (including the general public, in certain circumstances) may have access to your Content. 41 | 42 | You hereby grant Box and its contractors the right to transmit, use and disclose Content posted on the Service solely to the extent necessary to provide the Service, as otherwise permitted by these Terms, or to comply with any request of a governmental or regulatory body (including subpoenas or court orders), as otherwise required by law, or to respond to an emergency which Box believes in good faith requires Box to disclose information to assist in preventing the death or serious bodily injury of any person. 43 | 44 | You represent and warrant that: (a) you have all the rights in the Content necessary for you to use the Service and to grant the rights in this Section; and (b) the storage, use or transmission of the Content doesn't violate any law or these Terms. 45 | 46 | You will: (a) be solely responsible for the nature, quality and accuracy of the Content; (b) ensure that the Content (including the storage or transmission thereof) complies with these Terms and any and all applicable laws, and regulations; (c) promptly handle and resolve any notices and claims relating to the Content, including any notices sent to you by any person claiming that any Content violates any person's rights, such as take-down notices pursuant to the Digital Millennium Copyright Act and any other notices; and (d) maintain appropriate security, protection and backup copies of the Content, which may include, your use of additional encryption technology to protect the Content from unauthorized access. Box will have no liability of any kind as a result of the deletion of, correction of, destruction of, damage to, loss of or failure to store or encrypt any Content. 47 | 48 | You must immediately notify Box in writing of any unauthorized use of: (a) any Content (b) any account; or (c) the Service that comes to your attention. In the event of any such unauthorized use by any third party that obtained unauthorized access through you, you will take all steps necessary to terminate such unauthorized use. You will provide Box with such cooperation and assistance related to any such unauthorized use as Box may reasonably request. 49 | 50 | 6. CONTENT STORED IN THE UNITED STATES 51 | 52 | The Service is provided from the United States. By using and accessing the Service, you understand and consent to the storage and processing of the Content and any other personal information in the United States. Box reserves the right to store and process personal information outside of the United States, and will use commercially reasonable efforts to provide you with at least 30 days notice of any such changes in the processing location. 53 | 54 | 7. SUSPENSION AND TERMINATION OF USE OF THE SERVICE 55 | 56 | We reserve the right, to temporarily suspend or terminate your access to the Service at any time in our sole discretion, with or without cause, with or without notice, and without incurring liability of any kind. For example, we may suspend or terminate your access to or use of the Service for: (a) the actual or suspected violation of these Terms; (b) the use of the Services in a manner that may cause Box to have legal liability or disrupt others' use of the Services; (c) the suspicion or detection of any malicious code, virus or other harmful code by you or in your account; (d) scheduled downtime and recurring downtime; (e) use of excessive storage capacity or bandwidth; or (f) unplanned technical problems and outages. If, in Box's determination, the suspension might be indefinite and/or Box has elected to terminate your access to the Service, Box will use commercially reasonable efforts to notify you through the Service and/or by email to the email address associated with your account. You acknowledge that if your access to the Service is suspended or terminated, you may no longer have access to the Content that is stored with the Service. 57 | 58 | Upon termination by Box, for reasons other than cause, you may request access to your Content, which we will make available for an additional fee. You must make such request with five (5) days following termination. Otherwise, any Content you have stored with the Service will not be retrievable, and we will have no obligation to maintain any data stored in your account. 59 | 60 | In addition to other termination provisions, if your account it not currently subject to a paid subscription plan with us, we at our discretion may terminate your account if: (a) you do not engage in any activity in your account within thirty (30) days after becoming a Registered User; or (b) you do not engage in any activity in your account for any period of one hundred and twenty (120) consecutive days. In the event of such termination, any Content you may have stored will be lost. 61 | 62 | 8. ACCEPTABLE USE 63 | 64 | You must not use the Service to harm others or the Service. For example, you must not use the Service to harm, threaten, or harass another person, organization, or Box and/or to build a similar service or website. You must not: damage, disable, overburden, or impair the Service (or any network connected to the Service); resell or redistribute the Service or any part of it; use any unauthorized means to modify, reroute, or gain access to the Service or attempt to carry out these activities; or use any automated process or Service (such as a bot, a spider, or periodic caching of information stored by Box) to access or use the Service. In addition, you promise that you will not and will not encourage or assist any third party to: 65 | 66 | modify, alter, tamper with, repair or otherwise create derivative works of any Software; 67 | reverse engineer, disassemble or decompile the software used to provide or access the Service, including the Software, or attempt to discover or recreate the source code used to provide or access the Service, except and only to the extent that the applicable law expressly permits doing so; 68 | use the Service in any manner or for any purpose other than as expressly permitted by these Terms, the Privacy Policy, any User Guides or any other policy, instruction or terms applicable to the Service that are available on the Service ("Policies"); 69 | sell, lend, rent, resell, lease, sublicense or otherwise transfer any of the rights granted to you with respect to the Services to any third party; 70 | remove, obscure or alter any proprietary rights notice pertaining to the Service; 71 | access or use the Service in a way intended to improperly avoid incurring fees or exceeding usage limits or quotas; 72 | use the Service in connection with the operation of nuclear facilities, aircraft navigation, communication systems, medical devices, air traffic control devices, real time control systems or other situations in which the failure of the Service could lead to death, personal injury, or physical property or environmental damage; 73 | use the Service to: (i) engage in any unlawful or fraudulent activity or perpetrate a hoax or engage in phishing schemes or forgery or other similar falsification or manipulation of data; (ii) send unsolicited or unauthorized junk mail, spam, chain letters, pyramid schemes or any other form of duplicative or unsolicited messages, whether commercial or otherwise; (iii) store or transmit inappropriate Content, such as Content: (1) containing unlawful, defamatory, threatening, pornographic, abusive, libelous or otherwise objectionable material of any kind or nature, (2) containing any material that encourages conduct that could constitute a criminal offense, or (3) in a way that violates or infringes upon the intellectual property rights or the privacy or publicity rights of any person or entity or that may otherwise be unlawful or give rise to civil or criminal liability; (iv) store or transmit any Content that contains or is used to initiate a denial of service attack, software viruses or other harmful or deleterious computer code, files or programs such as Trojan horses, worms, time bombs, cancelbots, or spyware; or (v) abuse, harass, stalk or otherwise violate the legal rights of a third party; 74 | interfere with or disrupt servers or networks used by Box to provide the Service or used by other users' to access the Service, or violate any third party regulations, policies or procedures of such servers or networks or harass or interfere with another user's full use and enjoyment of any Software or the Service; 75 | access or attempt to access Box's other accounts, computer systems or networks not covered by these Terms, through password mining or any other means; 76 | cause, in Box's sole discretion, inordinate burden on the Service or Box's system resources or capacity; or 77 | share passwords or other access information or devices or otherwise authorize any third party to access or use the Software or the Service. 78 | Box reserves the right, in its sole discretion, to deactivate, change and/or require you to change your Box user ID and any custom or vanity URLs, custom links, or vanity domains you may obtain through the Services for any reason or for no reason. Box may exercise such right at any time, with or without prior notice. We will make all judgments concerning the applicability of these guidelines in our sole and exclusive discretion. We reserve the right, in our sole discretion, to determine whether and what action to take in response to each such notification, and any action or inaction in a particular instance will not dictate or limit our response to a future complaint. We will not assume or have any liability for any action or inaction with respect to any Content. 79 | 80 | 9. UPDATES TO THE SERVICE 81 | 82 | Box reserves the right, in its sole discretion, to make necessary unscheduled deployments of changes, updates or enhancements to the Service at any time. We may add or remove functionalities or features, and we may suspend or stop a Service altogether. 83 | 84 | 10. SOFTWARE 85 | 86 | If you receive Software from us, its use is governed in one of two ways: If you're presented with license terms that you must accept in order to use the Software, those terms apply; if no license is presented to you, these Terms apply. We reserve all other rights to the Software. 87 | 88 | We may automatically check your version of the Software. We may also automatically download to your computer or device new versions of the Software. 89 | 90 | Any Software is licensed, not sold. Unless we notify you otherwise, the Software license ends when your Service ends. You must then promptly uninstall the Software, or we may disable it. You must not work around any technical limitations in the Software. 91 | 92 | The Software is subject to applicable U.S. export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the Software. These laws include restrictions on destinations, end users, and end use. Without limitation, you may not transfer the Software or Service without U.S. government permission to anyone on U.S. government exclusion lists (see the Commerce Department's compliance list at http://www.bis.doc.gov/index.php/policy-guidance/lists-of-parties-of-concern. You represent and warrant that you're not on any of those lists or under the control of or an agent for anyone on those lists or the entities listed above. 93 | 94 | 11. THIRD PARTY SERVICES AND CONTENT 95 | 96 | All transactions using Box's services are between the transacting parties only. The Services may contain features and functionalities linking you or providing you with certain functionality and access to third party content, including Web sites, directories, servers, networks, systems, information and databases, applications, software, programs, products or services, and the Internet as a whole; you acknowledge that we are not responsible for such content or services. We may also provide some content to you as part of the Services. However, Box is not an agent of any transacting party, nor or we a direct party in any such transaction. Any such activities, and any terms associated with such activities, are solely between you and the applicable third-party. Similarly, we are not responsible for any third party content you access with the Services, and you irrevocably waive any claim against us with respect to such sites and third-party content. Box shall have no liability, obligation or responsibility for any such correspondence, purchase or promotion between you and any such third-party. You should make whatever investigation you feel necessary or appropriate before proceeding with any online or offline transaction with any of these third parties. You are solely responsible for your dealings with any third party related to the Services, including the delivery of and payment for goods and services. Should you have any problems resulting from your use of any third party services, or should you suffer data loss or other losses as a result of problems with any of your other service providers or any third-party services, we will not be responsible unless the problem was the direct result of our breaches. 97 | 98 | 12. BOX PROPRIETARY RIGHTS 99 | 100 | As between Box and you, Box or its licensors own and reserve all right, title and interest in and to the Service and all hardware, software and other items used to provide the Service, other than the rights explicitly granted to you to use the Service in accordance with this Terms. No title to or ownership of any proprietary rights related to the Service is transferred to you pursuant to these Terms. All rights not explicitly granted to you are reserved by Box. In the event that you provide comments, suggestions and recommendations to Box with respect to the Service (including, without limitation, with respect to modifications, enhancements, improvements and other changes to the Service) (collectively, "Feedback"), You hereby grant to Box a world-wide, royalty free, irrevocable, perpetual license to use and otherwise incorporate any Feedback in connection with the Service. 101 | 102 | 13. PRIVACY 103 | 104 | In order to operate and provide the Service, we collect certain information about you. As part of the Service, we may also automatically upload information about your computer or device, your use of the Service, and Service performance. We use and protect that information as described in the privacy policy located at https://www.box.com/legal/privacypolicy/ ("Privacy Policy"). You further acknowledge and agree that we may access or disclose information about you, including the Content, in order to: (a) comply with the law or respond to lawful requests or legal process; (b) protect the rights or property of Box or our customers, including the enforcement of our agreements or policies governing your use of the Service; or (c) act on a good faith belief that such access or disclosure is necessary to protect the personal safety of Box employees, customers, or the public. 105 | 106 | We retain the right to block or otherwise prevent delivery of any type of file, email or other communication to or from the Service as part of our efforts to protect the Service, protect our customers, or stop you from breaching these Terms. 107 | 108 | 14. NO WARRANTY 109 | 110 | BOX PROVIDES THE SERVICE "AS IS", "WITH ALL FAULTS" AND "AS AVAILABLE". TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, BOX MAKES NO (AND SPECIFICALLY DISCLAIMS ALL) REPRESENTATIONS OR WARRANTIES OF ANY KIND, WHETHER EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY THAT THE SERVICE WILL BE UNINTERRUPTED, ERROR-FREE OR FREE OF HARMFUL COMPONENTS, THAT THE CONTENT WILL BE SECURE OR NOT OTHERWISE LOST OR DAMAGED, OR ANY IMPLIED WARRANTY OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, AND ANY WARRANTY ARISING OUT OF ANY COURSE OF PERFORMANCE, COURSE OF DEALING OR USAGE OF TRADE. SOME JURISDICTIONS DO NOT ALLOW THE FOREGOING EXCLUSIONS. IN SUCH AN EVENT SUCH EXCLUSION WILL NOT APPLY SOLELY TO THE EXTENT PROHIBITED BY APPLICABLE LAW. 111 | 112 | 15. INDEMNIFICATION 113 | 114 | To the extent permitted by law, You will defend Box against any cost, loss, damage, or other liability arising from any third party demand or claim that any Content provided by you, or your use of the Service, in breach of these Terms: (a) infringes a registered patent, registered trademark, or copyright of a third party, or misappropriates a trade secret (to the extent that such misappropriation is not the result of Box's actions); or (b) violates applicable law or these Terms. Box will reasonably notify you of any such claim or demand that is subject to your indemnification obligation. 115 | 116 | 16. LIMITATION OF LIABILITY 117 | 118 | TO THE FULLEST EXTENT PERMITTED BY LAW, IN NO EVENT WILL BOX, ITS AFFILIATES, OFFICERS, EMPLOYEES, AGENTS, SUPPLIERS OR LICENSORS BE LIABLE FOR (A): ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, COVER OR CONSEQUENTIAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, REVENUE, GOODWILL, USE OR CONTENT) HOWEVER CAUSED, UNDER ANY THEORY OF LIABILITY, INCLUDING, WITHOUT LIMITATION, CONTRACT, TORT, WARRANTY, NEGLIGENCE OR OTHERWISE, EVEN IF BOX HAS BEEN ADVISED AS TO THE POSSIBILITY OF SUCH DAMAGES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE AGGREGATE LIABILITY OF BOX AND ITS AFFILIATES, OFFICERS, EMPLOYEES, AGENTS, SUPPLIERS OR LICENSORS, RELATING TO THE SERVICES WILL BE LIMITED TO THE GREATER OF AN AMOUNT EQUAL TO THREE MONTHS OF YOUR SERVICE FEE FOR THE SERVICE OR FIVE DOLLARS ($5.00). THE LIMITATIONS AND EXCLUSIONS ALSO APPLY IF THIS REMEDY DOES NOT FULLY COMPENSATE YOU FOR ANY LOSSES OR FAILS OF ITS ESSENTIAL PURPOSE. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR OTHER DAMAGES. IN SUCH AN EVENT THIS LIMITATION WILL NOT APPLY TO YOU TO THE EXTENT PROHIBITED BY LAW. 119 | 120 | 17. CONTRACTING PARTY; GOVERNING LAW; LOCATION FOR RESOLVING DISPUTES 121 | 122 | You are contracting with Box, Inc. with an address at 4440 El Camino Real Los Altos, CA 94022 USA. The laws of the State of California, U.S.A. govern the interpretation of these Terms and apply to claims for breach of these Terms, regardless of conflict of laws principles. The parties specifically exclude from application to these Terms the United Nations Convention on Contracts for the International Sale of Goods and the Uniform Computer Information Transactions Act. All other claims, including claims regarding consumer protection laws, unfair competition laws, and in tort, will, only to the extent required by applicable law, be subject to the laws of your state of residence in the United States, or, if you live outside the United States, the laws of the country in which you reside. You and we irrevocably consent to the exclusive jurisdiction and venue of the state or federal courts for Santa Clara County, California, USA, for all disputes arising out of or relating to these Terms. Box may assign this contract to another entity at any time with or without notice to you. 123 | 124 | 18. NOTICES 125 | 126 | We may send you, in electronic form, information about the Service, additional information, and information the law requires us to provide. We may provide required information to you by email at the address you specified when you signed up for the Service or by access to a website that we identify. Notices emailed to you will be deemed given and received when the email is sent. If you don't consent to receive notices electronically, you must stop using the Service. You may provide legal noticed to us via email to legalops@box.com, with a duplicate copy sent via registered mail, return receipt requested, to the following address: Box, Attn: Global Legal Operations, 4440 El Camino Real, Los Altos, California 94022. Any such notice, in either case, must specifically reference that it is a notice given under these Terms. 127 | 128 | 19. FEES & PAYMENTS 129 | 130 | 19.1 Fees 131 | 132 | The fees applicable for the Service ("Fees") are available on the Site and/or in Box’s then-current published price list. The price stated for the Service excludes all taxes and charges, unless stated otherwise. You're responsible for any taxes and for all other charges incidental to using the Services (for example, data charges and currency exchange settlements). You will pay the Fees in the currency Box quoted for your account. Box reserves the right to change the quoted currency at any time. 133 | 134 | We'll notify you in advance, either through the Service or to the email address you have most recently provided to us, if we change the price of the Service. If there's a specific length and price for your Service offer already in effect, that price will remain in force for that time. After the offer period ends, your use of the Service will be charged at the then-current price. If your Service is on a period basis (for example, monthly) with no specific length, we'll notify you of any price change at least 30 days in advance. If you don't agree to these changes, you must cancel and stop using the Service via a phone call to 1-877-729-4269 (extension 3) or email cancel@box.com with cancellation confirmation from a Box representative) no later than three (3) business days prior to the conclusion of your current payment term, whether monthly, yearly, or otherwise. If you cancel, your Service ends at the end of your current Service period or payment period. If you fail to cancel in accordance with these Terms, we will automatically renew the Service at the then-current price and for the same subscription period and will charge your credit card on file with us commencing on the first day of the renewal of the subscription period. 135 | 136 | 19.2 Payment 137 | 138 | You must be authorized to use the credit card that you enter when you create a billing account. You authorize us to charge you for the Service using your credit card and for any paid feature of the Service that you choose to sign up for or use while these Terms are in force. We may bill: (a) in advance; (b) at the time of purchase; (c) shortly after purchase; or (d) on a recurring basis for subscription Services. Also, we may charge you up to the amount you've approved, and we'll notify you in advance of the difference for recurring subscription Services. We may bill you simultaneously for more than one of your prior billing periods. We may automatically renew your Service and charge you for any renewal term. All paid accounts are due the date the invoice is posted on your account. Except as specifically set forth in this section, all Services are prepaid for the period selected (monthly, yearly or otherwise) and are non-refundable. This includes accounts that are renewed. 139 | 140 | You must keep all information in your billing account current. You can access and modify your billing account information using the on the Site. You may change your payment method at any time. If you tell us to stop using your payment method and we no longer receive payment from you for the paid Service, we may cancel that Service. Your notice to us will not affect charges we submit to your billing account before we reasonably could act on your request. 141 | 142 | Except as prohibited by law, we may assess a late charge if you do not pay on time. You must pay these late charges when we bill you for them. The late charge will be the lesser of 1 percent of the unpaid amount each month or the maximum rate permitted by law. We may use a third party to collect past due amounts. You must pay for all reasonable costs we incur to collect any past due amounts, including reasonable attorneys' fees and other legal fees and costs. We may suspend or cancel your Service if you fail to pay in full on time. 143 | 144 | 19.3 Trials 145 | 146 | If you are currently on our free 14-day trial, you may cancel or downgrade your account, free of charge, at any time until fourteen (14) days after your account was created. (The day of creation constitutes the first day of the 14-day trial.) 147 | 148 | The last day of the 14-day trial signifies the due date of the first payment. If payment is not received by Box on the due date, user's account will be frozen, inaccessible, and all shared links will be turned off until all outstanding payments have been processed by Box. Users retain the responsibility for settling all outstanding balances in a timely manner and maintaining updated billing information. If not complied with, at the end of 90 days, user's account will be deactivated and all files will no longer be retrievable. 149 | 150 | Unless we notify you otherwise, if you're participating in any trial period offer, you must cancel the Service by the end of the trial period to avoid incurring charges. If you do not cancel your Service and we have told you the Service will convert to a paid subscription at the end of the trial period, you authorize us to charge your credit card for the Service and no credits or refunds will be available. You may, however, cancel your subscription before the next billing in accordance with the terms of this Agreement. 151 | 152 | If you are a paid non-trial user you will not be issued a refund for your most recent (or any previous) billing, unless you are on a NON-TRIAL Annual Subscription Plan, in which event you may obtain a refund for a renewal fee only if you request the refund within thirty (30) days of the day on which you were charged for the renewal of your account; and in such an event, only a partial refund equivalent to 80% of the annual renewal fee will be returned 153 | 154 | 20. SUBSCRIPTION PERIOD 155 | 156 | You may elect one of the following subscription plans and billing options: 157 | 158 | A monthly subscription plan (“Monthly Subscription Plan”). The subscription period for the Monthly Subscription Plan will be one month and will automatically renew unless you cancel your Monthly Subscription Plan in accordance with these Terms at least three (3) business days prior to the renewal date. You will be billed monthly for the Monthly Subscription Plan on or about the same day each month until such time that you cancel your Monthly Subscription Plan. 159 | An annual subscription plan (“Annual Subscription Plan”). The subscription period for the Annual Subscription Plan will be one year and will automatically renew each year on the anniversary of your Annual Subscription Plan unless you cancel your Annual Subscription Plan in accordance with these Terms at least ten (10) days prior to your renewal date. You will be billed annually for the Annual Subscription Plan on or about the same day each year until such time that you cancel your Annual Subscription Plan. For the avoidance of doubt, please note, you will not be permitted to cancel, reduce the number of seats, or downgrade the Box Service you have selected until the anniversary of your Annual Subscription Plan. There will be no refunds for Annual Subscription Plan payments. Please be certain you are committing to a one (1) year period if you select the Annual Subscription Plan. If you are not certain, we recommend choosing the Monthly Subscription Plan. 160 | 161 | If you select the Monthly Subscription Plan, you can switch to the Annual Subscription Plan at any time. If you select the Annual Subscription Plan, you may not change to the Monthly Subscription Plan until the end of the one-year term of your Annual Subscription Plan. 162 | 163 | 21. MISCELLANEOUS 164 | 165 | 21.1. Severability; Entire Agreement 166 | 167 | These Terms apply to the maximum extent permitted by relevant law. If a court holds that we cannot enforce a part of these Terms as written, you and we will replace those terms with similar terms to the extent enforceable under the relevant law, but the rest of these Terms will remain in effect. This is the entire contract between you and us regarding the Service. It supersedes any prior contract or oral or written statements regarding your use of the Service. 168 | 169 | 21.2. Assignment and transfer 170 | 171 | We may assign, transfer, or otherwise dispose our rights and obligations under this contract, in whole or in part, at any time without notice. You may not assign this contract or transfer any rights to use the Service. 172 | 173 | 21.3. Independent Contractors; No third-party beneficiaries 174 | 175 | Box and you are not legal partners or agents; instead, our relationship is that of independent contractors. This contract is solely for your and our benefit. It is not for the benefit of any other person, except for permitted successors. 176 | 177 | 21.4. Claims 178 | 179 | Claims must be filed within one year. You must bring any claim related to these Terms or the Service within one year of the date you could first bring the claim, unless your local law requires a longer time to file claims. If it isn't filed in time, the claim is permanently barred. 180 | 181 | 21.5. Waiver 182 | 183 | The failure of either party to insist upon or enforce strict performance of any of the provisions of these Terms or to exercise any rights or remedies under these Terms will not be construed as a waiver or relinquishment to any extent of such party's right to assert or rely upon any such provision, right or remedy in that or any other instance; rather, the same will remain in full force and effect. 184 | 185 | 21.6. Government Use 186 | 187 | If you are a U.S. government entity, you acknowledge that any Software and User Guides that are provided are "Commercial Items" as defined at 48 C.F.R. 2.101, and are being provided as commercial computer software subject to the restricted rights described in 48 C.F.R. 2.101 and 12.212. 188 | 189 | 22. COPYRIGHT COMPLAINTS AND REMOVAL POLICY 190 | 191 | Box does not tolerate content that appears to infringe any copyright or other intellectual property rights or otherwise violates these Terms and will respond to notices of alleged copyright infringement that comply with the law and are properly provided to us. Such notices can be reported by visiting our help page at http://sites.box.com/help/dmca/ and filling out a form. We reserve the right to delete or disable Content alleged to violate these Terms and to terminate repeat infringers. Our designated agent for notice of alleged copyright infringement is: 192 | 193 | Attn: DMCA Copyright Agent 194 | Box, Inc. 195 | 4440 El Camino Real 196 | 197 | Los Altos, CA 94022 USA 198 | Phone: 1-877-729-4269 199 | email: legal@box.com 200 | 201 | Federal law requires your DMCA Notice to include the following information: 202 | 203 | Identification of the copyrighted work that you claim has been infringed; 204 | Identification of the material, including URL, that you claim is infringing, with enough detail so that we may locate it; 205 | Your address, telephone number, and e-mail address; 206 | A statement declaring under penalty of perjury that (a) you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law; (b) the above information in your notice is accurate, and (c) you are the owner of the copyright interest involved or you are authorized to act on behalf of that owner; and 207 | Your physical or electronic signature. 208 | INTELLECTUAL PROPERTY NOTICES 209 | 210 | All contents of the Site and Services including but not limited to design, text, software, technical drawings, configurations, graphics, other files, and their selection and arrangement are: Copyright © Box, and/or the proprietary property of its suppliers, affiliates, or licensors. All Rights Reserved. 211 | 212 | Box and the Box logo are including without limitation, either trademarks, service marks or registered trademarks of Box, Inc., and may not be copied, imitated, or used, in whole or in part, without Box's prior written permission or that of our suppliers or licensors. Other product and company names may be trade or service marks of their respective owners. 213 | 214 | Box may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter that is part of the Service. Unless we have granted you licenses to our intellectual property in these Terms, our providing you with the Service does not give you any license to our intellectual property. Any rights not expressly granted herein are reserved. 215 | -------------------------------------------------------------------------------- /BoxShareSDKSampleApp/BoxShareSDKSampleApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0E24BF281A7AF2C500BD6C97 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0E24BF261A7AF2C500BD6C97 /* Main.storyboard */; }; 11 | 10479B9F568321B9BFFBEE9E /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F59EF3C3801043E6365AD173 /* libPods.a */; }; 12 | E19AA20F1A6EEABA005BD20E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E19AA20E1A6EEABA005BD20E /* main.m */; }; 13 | E19AA2121A6EEABA005BD20E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E19AA2111A6EEABA005BD20E /* AppDelegate.m */; }; 14 | E19AA2151A6EEABA005BD20E /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E19AA2141A6EEABA005BD20E /* ViewController.m */; }; 15 | E19AA21A1A6EEABA005BD20E /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E19AA2191A6EEABA005BD20E /* Images.xcassets */; }; 16 | E19AA21D1A6EEABA005BD20E /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = E19AA21B1A6EEABA005BD20E /* LaunchScreen.xib */; }; 17 | E19AA2291A6EEABA005BD20E /* BoxShareSDKSampleAppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E19AA2281A6EEABA005BD20E /* BoxShareSDKSampleAppTests.m */; }; 18 | E1D5A68D1A7AF53A00584810 /* BOXSampleAppListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E1D5A68C1A7AF53A00584810 /* BOXSampleAppListViewController.m */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | E19AA2231A6EEABA005BD20E /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = E19AA2011A6EEABA005BD20E /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = E19AA2081A6EEABA005BD20E; 27 | remoteInfo = BoxShareSDKSampleApp; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 0E24BF271A7AF2C500BD6C97 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 33 | 0E71BF691AA14A1B001556A1 /* BoxShareSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BoxShareSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | 15FE73B31AA4463A00019AFA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 35 | 43ADE487D008E0CF1B8D71A1 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 36 | 90F93E9121EE2D8A0201F268 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 37 | E19AA2091A6EEABA005BD20E /* BoxShareSDKSampleApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BoxShareSDKSampleApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | E19AA20D1A6EEABA005BD20E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 39 | E19AA20E1A6EEABA005BD20E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 40 | E19AA2101A6EEABA005BD20E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 41 | E19AA2111A6EEABA005BD20E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 42 | E19AA2131A6EEABA005BD20E /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 43 | E19AA2141A6EEABA005BD20E /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 44 | E19AA2191A6EEABA005BD20E /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 45 | E19AA21C1A6EEABA005BD20E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 46 | E19AA2221A6EEABA005BD20E /* BoxShareSDKSampleAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BoxShareSDKSampleAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 47 | E19AA2271A6EEABA005BD20E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 48 | E19AA2281A6EEABA005BD20E /* BoxShareSDKSampleAppTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BoxShareSDKSampleAppTests.m; sourceTree = ""; }; 49 | E1D5A68B1A7AF53A00584810 /* BOXSampleAppListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BOXSampleAppListViewController.h; sourceTree = ""; }; 50 | E1D5A68C1A7AF53A00584810 /* BOXSampleAppListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BOXSampleAppListViewController.m; sourceTree = ""; }; 51 | F59EF3C3801043E6365AD173 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | /* End PBXFileReference section */ 53 | 54 | /* Begin PBXFrameworksBuildPhase section */ 55 | 0E71BF641AA14A1B001556A1 /* Frameworks */ = { 56 | isa = PBXFrameworksBuildPhase; 57 | buildActionMask = 2147483647; 58 | files = ( 59 | ); 60 | runOnlyForDeploymentPostprocessing = 0; 61 | }; 62 | E19AA2061A6EEABA005BD20E /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | 10479B9F568321B9BFFBEE9E /* libPods.a in Frameworks */, 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | E19AA21F1A6EEABA005BD20E /* Frameworks */ = { 71 | isa = PBXFrameworksBuildPhase; 72 | buildActionMask = 2147483647; 73 | files = ( 74 | ); 75 | runOnlyForDeploymentPostprocessing = 0; 76 | }; 77 | /* End PBXFrameworksBuildPhase section */ 78 | 79 | /* Begin PBXGroup section */ 80 | 15FE73B51AA4469C00019AFA /* Frameworks */ = { 81 | isa = PBXGroup; 82 | children = ( 83 | 15FE73B31AA4463A00019AFA /* Foundation.framework */, 84 | ); 85 | name = Frameworks; 86 | sourceTree = ""; 87 | }; 88 | 53FA0929DCCA626226E34826 /* Pods */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | 43ADE487D008E0CF1B8D71A1 /* Pods.debug.xcconfig */, 92 | 90F93E9121EE2D8A0201F268 /* Pods.release.xcconfig */, 93 | ); 94 | name = Pods; 95 | sourceTree = ""; 96 | }; 97 | D67EA536BE2D2AEB7EC35602 /* Frameworks */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | F59EF3C3801043E6365AD173 /* libPods.a */, 101 | ); 102 | name = Frameworks; 103 | sourceTree = ""; 104 | }; 105 | E19AA2001A6EEABA005BD20E = { 106 | isa = PBXGroup; 107 | children = ( 108 | E19AA20B1A6EEABA005BD20E /* BoxShareSDKSampleApp */, 109 | E19AA2251A6EEABA005BD20E /* BoxShareSDKSampleAppTests */, 110 | E19AA20A1A6EEABA005BD20E /* Products */, 111 | 53FA0929DCCA626226E34826 /* Pods */, 112 | D67EA536BE2D2AEB7EC35602 /* Frameworks */, 113 | ); 114 | sourceTree = ""; 115 | }; 116 | E19AA20A1A6EEABA005BD20E /* Products */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | E19AA2091A6EEABA005BD20E /* BoxShareSDKSampleApp.app */, 120 | E19AA2221A6EEABA005BD20E /* BoxShareSDKSampleAppTests.xctest */, 121 | 0E71BF691AA14A1B001556A1 /* BoxShareSDK.framework */, 122 | ); 123 | name = Products; 124 | sourceTree = ""; 125 | }; 126 | E19AA20B1A6EEABA005BD20E /* BoxShareSDKSampleApp */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 15FE73B51AA4469C00019AFA /* Frameworks */, 130 | E19AA2101A6EEABA005BD20E /* AppDelegate.h */, 131 | E19AA2111A6EEABA005BD20E /* AppDelegate.m */, 132 | E19AA2131A6EEABA005BD20E /* ViewController.h */, 133 | E19AA2141A6EEABA005BD20E /* ViewController.m */, 134 | 0E24BF261A7AF2C500BD6C97 /* Main.storyboard */, 135 | E19AA2191A6EEABA005BD20E /* Images.xcassets */, 136 | E19AA21B1A6EEABA005BD20E /* LaunchScreen.xib */, 137 | E19AA20C1A6EEABA005BD20E /* Supporting Files */, 138 | E1D5A68B1A7AF53A00584810 /* BOXSampleAppListViewController.h */, 139 | E1D5A68C1A7AF53A00584810 /* BOXSampleAppListViewController.m */, 140 | ); 141 | path = BoxShareSDKSampleApp; 142 | sourceTree = ""; 143 | }; 144 | E19AA20C1A6EEABA005BD20E /* Supporting Files */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | E19AA20D1A6EEABA005BD20E /* Info.plist */, 148 | E19AA20E1A6EEABA005BD20E /* main.m */, 149 | ); 150 | name = "Supporting Files"; 151 | sourceTree = ""; 152 | }; 153 | E19AA2251A6EEABA005BD20E /* BoxShareSDKSampleAppTests */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | E19AA2281A6EEABA005BD20E /* BoxShareSDKSampleAppTests.m */, 157 | E19AA2261A6EEABA005BD20E /* Supporting Files */, 158 | ); 159 | path = BoxShareSDKSampleAppTests; 160 | sourceTree = ""; 161 | }; 162 | E19AA2261A6EEABA005BD20E /* Supporting Files */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | E19AA2271A6EEABA005BD20E /* Info.plist */, 166 | ); 167 | name = "Supporting Files"; 168 | sourceTree = ""; 169 | }; 170 | /* End PBXGroup section */ 171 | 172 | /* Begin PBXHeadersBuildPhase section */ 173 | 0E71BF651AA14A1B001556A1 /* Headers */ = { 174 | isa = PBXHeadersBuildPhase; 175 | buildActionMask = 2147483647; 176 | files = ( 177 | ); 178 | runOnlyForDeploymentPostprocessing = 0; 179 | }; 180 | /* End PBXHeadersBuildPhase section */ 181 | 182 | /* Begin PBXNativeTarget section */ 183 | 0E71BF681AA14A1B001556A1 /* BoxShareSDK */ = { 184 | isa = PBXNativeTarget; 185 | buildConfigurationList = 0E71BF771AA14A1B001556A1 /* Build configuration list for PBXNativeTarget "BoxShareSDK" */; 186 | buildPhases = ( 187 | 0E71BF631AA14A1B001556A1 /* Sources */, 188 | 0E71BF641AA14A1B001556A1 /* Frameworks */, 189 | 0E71BF651AA14A1B001556A1 /* Headers */, 190 | 0E71BF661AA14A1B001556A1 /* Resources */, 191 | 0E71BF671AA14A1B001556A1 /* ShellScript */, 192 | ); 193 | buildRules = ( 194 | ); 195 | dependencies = ( 196 | ); 197 | name = BoxShareSDK; 198 | productName = BoxShareSDK; 199 | productReference = 0E71BF691AA14A1B001556A1 /* BoxShareSDK.framework */; 200 | productType = "com.apple.product-type.bundle"; 201 | }; 202 | E19AA2081A6EEABA005BD20E /* BoxShareSDKSampleApp */ = { 203 | isa = PBXNativeTarget; 204 | buildConfigurationList = E19AA22C1A6EEABA005BD20E /* Build configuration list for PBXNativeTarget "BoxShareSDKSampleApp" */; 205 | buildPhases = ( 206 | 014307FF277A0339194B49C0 /* Check Pods Manifest.lock */, 207 | E19AA2051A6EEABA005BD20E /* Sources */, 208 | E19AA2061A6EEABA005BD20E /* Frameworks */, 209 | E19AA2071A6EEABA005BD20E /* Resources */, 210 | CCB9E27BC12BE0CFC403EC4B /* Copy Pods Resources */, 211 | ); 212 | buildRules = ( 213 | ); 214 | dependencies = ( 215 | ); 216 | name = BoxShareSDKSampleApp; 217 | productName = BoxShareSDKSampleApp; 218 | productReference = E19AA2091A6EEABA005BD20E /* BoxShareSDKSampleApp.app */; 219 | productType = "com.apple.product-type.application"; 220 | }; 221 | E19AA2211A6EEABA005BD20E /* BoxShareSDKSampleAppTests */ = { 222 | isa = PBXNativeTarget; 223 | buildConfigurationList = E19AA22F1A6EEABA005BD20E /* Build configuration list for PBXNativeTarget "BoxShareSDKSampleAppTests" */; 224 | buildPhases = ( 225 | E19AA21E1A6EEABA005BD20E /* Sources */, 226 | E19AA21F1A6EEABA005BD20E /* Frameworks */, 227 | E19AA2201A6EEABA005BD20E /* Resources */, 228 | ); 229 | buildRules = ( 230 | ); 231 | dependencies = ( 232 | E19AA2241A6EEABA005BD20E /* PBXTargetDependency */, 233 | ); 234 | name = BoxShareSDKSampleAppTests; 235 | productName = BoxShareSDKSampleAppTests; 236 | productReference = E19AA2221A6EEABA005BD20E /* BoxShareSDKSampleAppTests.xctest */; 237 | productType = "com.apple.product-type.bundle.unit-test"; 238 | }; 239 | /* End PBXNativeTarget section */ 240 | 241 | /* Begin PBXProject section */ 242 | E19AA2011A6EEABA005BD20E /* Project object */ = { 243 | isa = PBXProject; 244 | attributes = { 245 | LastUpgradeCheck = 0630; 246 | ORGANIZATIONNAME = Box; 247 | TargetAttributes = { 248 | 0E71BF681AA14A1B001556A1 = { 249 | CreatedOnToolsVersion = 6.1.1; 250 | }; 251 | E19AA2081A6EEABA005BD20E = { 252 | CreatedOnToolsVersion = 6.1.1; 253 | }; 254 | E19AA2211A6EEABA005BD20E = { 255 | CreatedOnToolsVersion = 6.1.1; 256 | TestTargetID = E19AA2081A6EEABA005BD20E; 257 | }; 258 | }; 259 | }; 260 | buildConfigurationList = E19AA2041A6EEABA005BD20E /* Build configuration list for PBXProject "BoxShareSDKSampleApp" */; 261 | compatibilityVersion = "Xcode 3.2"; 262 | developmentRegion = English; 263 | hasScannedForEncodings = 0; 264 | knownRegions = ( 265 | en, 266 | Base, 267 | ); 268 | mainGroup = E19AA2001A6EEABA005BD20E; 269 | productRefGroup = E19AA20A1A6EEABA005BD20E /* Products */; 270 | projectDirPath = ""; 271 | projectRoot = ""; 272 | targets = ( 273 | E19AA2081A6EEABA005BD20E /* BoxShareSDKSampleApp */, 274 | E19AA2211A6EEABA005BD20E /* BoxShareSDKSampleAppTests */, 275 | 0E71BF681AA14A1B001556A1 /* BoxShareSDK */, 276 | ); 277 | }; 278 | /* End PBXProject section */ 279 | 280 | /* Begin PBXResourcesBuildPhase section */ 281 | 0E71BF661AA14A1B001556A1 /* Resources */ = { 282 | isa = PBXResourcesBuildPhase; 283 | buildActionMask = 2147483647; 284 | files = ( 285 | ); 286 | runOnlyForDeploymentPostprocessing = 0; 287 | }; 288 | E19AA2071A6EEABA005BD20E /* Resources */ = { 289 | isa = PBXResourcesBuildPhase; 290 | buildActionMask = 2147483647; 291 | files = ( 292 | E19AA21D1A6EEABA005BD20E /* LaunchScreen.xib in Resources */, 293 | E19AA21A1A6EEABA005BD20E /* Images.xcassets in Resources */, 294 | 0E24BF281A7AF2C500BD6C97 /* Main.storyboard in Resources */, 295 | ); 296 | runOnlyForDeploymentPostprocessing = 0; 297 | }; 298 | E19AA2201A6EEABA005BD20E /* Resources */ = { 299 | isa = PBXResourcesBuildPhase; 300 | buildActionMask = 2147483647; 301 | files = ( 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | }; 305 | /* End PBXResourcesBuildPhase section */ 306 | 307 | /* Begin PBXShellScriptBuildPhase section */ 308 | 014307FF277A0339194B49C0 /* Check Pods Manifest.lock */ = { 309 | isa = PBXShellScriptBuildPhase; 310 | buildActionMask = 2147483647; 311 | files = ( 312 | ); 313 | inputPaths = ( 314 | ); 315 | name = "Check Pods Manifest.lock"; 316 | outputPaths = ( 317 | ); 318 | runOnlyForDeploymentPostprocessing = 0; 319 | shellPath = /bin/sh; 320 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 321 | showEnvVarsInLog = 0; 322 | }; 323 | 0E71BF671AA14A1B001556A1 /* ShellScript */ = { 324 | isa = PBXShellScriptBuildPhase; 325 | buildActionMask = 2147483647; 326 | files = ( 327 | ); 328 | inputPaths = ( 329 | ); 330 | outputPaths = ( 331 | ); 332 | runOnlyForDeploymentPostprocessing = 0; 333 | shellPath = /usr/bin/python; 334 | shellScript = "# TAG: BUILD SCRIPT (do not remove this comment)\n# Build script generated using https://github.com/kstenerud/iOS-Universal-Framework Mk 8 (beta 2012-06-16)\nimport logging\n\n\n##############################################################################\n#\n# Configuration\n#\n##############################################################################\n\n# Select which kind of framework to build.\n#\n# Note: Due to issues with Xcode's build process, if you select\n# 'embeddedframework', it will still show the regular framework\n# (as a symlink) along side of the embedded framework. Be sure to\n# instruct your users to copy/move the embedded framework in this case!\n#\n# If your framework contains resources such as images, nibs, momds, plists,\n# zipfiles and such, choose 'embeddedframework'.\n#\n# If your framework contains no resources, choose 'framework'.\n#\nconfig_framework_type = 'framework'\n#config_framework_type = 'embeddedframework'\n\n# Open the build directory in Finder when the universal framework is\n# successfully built.\n#\n# This value can be overridden by setting the UFW_OPEN_BUILD_DIR env variable\n# to True or False.\n#\n# Recommended setting: True\n#\nconfig_open_build_dir = True\n\n# If true, ensures that all public headers are stored in the framework under\n# the same directory hierarchy as they were in the source tree.\n#\n# Xcode by default places all headers at the same top level, but every other\n# build tool in the known universe preserves directory structure. For simple\n# libraries it doesn't really matter much, but for ports of existing software\n# packages or for bigger libraries, it makes sense to have more structure.\n#\n# The default is set to \"False\" since that's what most Xcode users are used to.\n#\n# Recommended setting: True for deep hierarchy projects, False otherwise.\n#\nconfig_deep_header_hierarchy = False\n\n# Specify where the top of the public header hierarchy is. This path is\n# relative to the project's dir (PROJECT_DIR). You can reference environment\n# variables using templating syntax (e.g. \"${TARGET_NAME}/Some/Subdir\")\n#\n# NOTE: Only used if config_deep_header_hierarchy is True.\n#\n# If this is set to None, the script will attempt to figure out for itself\n# where the top of the header hierarchy is by looking for common path prefixes\n# in the public header files. This process can fail if:\n# - You only have one public header file.\n# - Your source header files don't all have a common root.\n#\n# A common approach is to use \"${TARGET_NAME}\", working under the assumption\n# that all of your header files share the common root of a directory under\n# your project with the same name as your target (which is the Xcode default).\n#\n# Recommended setting: \"${TARGET_NAME}\"\n#\nconfig_deep_header_top = \"${TARGET_NAME}\"\n\n# Warn when \"DerivedData\" is detected in any of the header, library, or\n# framework search paths. In almost all cases, references to directories under\n# DerivedData are added as a result of an Xcode bug and must be manually\n# removed.\n#\n# Recommended setting: True\n#\nconfig_warn_derived_data = True\n\n# Warn if no headers were marked public in this framework.\n#\n# Recommended setting: True\n#\nconfig_warn_no_public_headers = True\n\n# Cause the build to fail if any warnings are issued.\n#\n# Recommended setting: True\n#\nconfig_fail_on_warnings = True\n\n# Minimum log level\n#\n# Recommended setting: logging.INFO\n#\nconfig_log_level = logging.INFO\n\n\n##############################################################################\n#\n# Don't touch anything below here unless you know what you're doing.\n#\n##############################################################################\n\nimport collections\nimport json\nimport os\nimport re\nimport shlex\nimport shutil\nimport string\nimport subprocess\nimport sys\nimport time\nimport traceback\n\n\n##############################################################################\n#\n# Globals\n#\n##############################################################################\n\nlog = logging.getLogger('UFW')\n\nissued_warnings = False\n\n\n##############################################################################\n#\n# Classes\n#\n##############################################################################\n\n# Allows the slave build to communicate with the master build.\n#\nclass BuildState:\n\n def __init__(self):\n self.reload()\n\n def reset(self):\n self.slave_platform = None\n self.slave_architectures = []\n self.slave_linked_archive_paths = []\n self.slave_built_fw_path = None\n self.slave_built_embedded_fw_path = None\n\n def set_slave_properties(self, architectures,\n linked_archive_paths,\n built_fw_path,\n built_embedded_fw_path):\n self.slave_platform = os.environ['PLATFORM_NAME']\n self.slave_architectures = architectures\n self.slave_linked_archive_paths = linked_archive_paths\n self.slave_built_fw_path = built_fw_path\n self.slave_built_embedded_fw_path = built_embedded_fw_path\n\n def get_save_path(self):\n return os.path.join(os.environ['PROJECT_TEMP_DIR'], \"ufw_build_state.json\")\n\n def persist(self):\n filename = self.get_save_path()\n parent = os.path.dirname(filename)\n if not os.path.isdir(parent):\n os.makedirs(parent)\n with open(filename, \"w\") as f:\n f.write(json.dumps(self.__dict__))\n\n def reload(self):\n self.reset()\n filename = self.get_save_path()\n if os.path.exists(filename):\n with open(filename, \"r\") as f:\n new_dict = json.loads(f.read())\n if new_dict is not None:\n self.__dict__ = dict(self.__dict__.items() + new_dict.items())\n\n\n# Holds information about the current project and build environment.\n#\nclass Project:\n\n def __init__(self, filename):\n sourcecode_types = ['sourcecode.c.c',\n 'sourcecode.c.objc',\n 'sourcecode.cpp.cpp',\n 'sourcecode.cpp.objcpp',\n 'sourcecode.asm.asm',\n 'sourcecode.asm.llvm',\n 'sourcecode.nasm']\n\n self.build_state = BuildState()\n self.project_data = self.load_from_file(filename)\n self.target = filter(lambda x: x['name'] == os.environ['TARGET_NAME'], self.project_data['targets'])[0]\n self.public_headers = self.get_build_phase_files('PBXHeadersBuildPhase', lambda x: x.get('settings', False) and x['settings'].get('ATTRIBUTES', False) and 'Public' in x['settings']['ATTRIBUTES'])\n self.static_libraries = self.get_build_phase_files('PBXFrameworksBuildPhase', lambda x: x['fileRef']['fileType'] == 'archive.ar' and x['fileRef']['sourceTree'] not in ['DEVELOPER_DIR', 'SDKROOT'])\n self.static_frameworks = self.get_build_phase_files('PBXFrameworksBuildPhase', lambda x: x['fileRef']['fileType'] == 'wrapper.framework' and x['fileRef']['sourceTree'] not in ['DEVELOPER_DIR', 'SDKROOT'])\n self.compilable_sources = self.get_build_phase_files('PBXSourcesBuildPhase', lambda x: x['fileRef']['fileType'] in sourcecode_types)\n self.header_paths = [os.path.join(*x['pathComponents']) for x in self.public_headers]\n\n self.headers_dir = os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['CONTENTS_FOLDER_PATH'], 'Headers')\n self.libtool_path = os.path.join(os.environ['DT_TOOLCHAIN_DIR'], 'usr', 'bin', 'libtool')\n self.project_filename = os.path.join(os.environ['PROJECT_FILE_PATH'], \"project.pbxproj\")\n self.local_exe_path = os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['EXECUTABLE_PATH'])\n self.local_architectures = os.environ['ARCHS'].split(' ')\n self.local_built_fw_path = os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['WRAPPER_NAME'])\n self.local_built_embedded_fw_path = os.path.splitext(self.local_built_fw_path)[0] + \".embeddedframework\"\n self.local_linked_archive_paths = [self.get_linked_ufw_archive_path(arch) for arch in self.local_architectures]\n self.local_platform = os.environ['PLATFORM_NAME']\n other_platforms = os.environ['SUPPORTED_PLATFORMS'].split(' ')\n other_platforms.remove(self.local_platform)\n self.other_platform = other_platforms[0]\n\n sdk_name = os.environ['SDK_NAME']\n if not sdk_name.startswith(self.local_platform):\n raise Exception(\"%s didn't start with %s\" % (sdk_name, self.local_platform))\n self.sdk_version = sdk_name[len(self.local_platform):]\n\n # Load an Xcode project file.\n #\n def load_from_file(self, filename):\n project_file = json.loads(subprocess.check_output([\"plutil\", \"-convert\", \"json\", \"-o\", \"-\", filename]))\n all_objects = project_file['objects']\n del project_file['objects']\n for obj in all_objects.values():\n self.fix_keys(obj)\n self.unpack_objects(self.build_dereference_list(all_objects, None, None, project_file))\n self.unpack_objects(self.build_dereference_list(all_objects, None, None, all_objects.values()))\n project_data = project_file['rootObject']\n self.build_full_paths(project_data, splitpath(os.environ['SOURCE_ROOT']))\n return project_data\n\n def is_key(self, obj): \n return isinstance(obj, basestring) and len(obj) == 24 and re.search('^[0-9a-fA-F]+$', obj) is not None\n \n def build_dereference_list(self, all_objects, parent, key, obj):\n deref_list = []\n if self.is_key(obj):\n dereferenced = all_objects.get(obj, obj)\n if dereferenced is not obj:\n deref_list.append((parent, key, obj, dereferenced))\n elif isinstance(obj, collections.Mapping):\n for k, v in obj.iteritems():\n deref_list += self.build_dereference_list(all_objects, obj, k, v)\n elif isinstance(obj, collections.Iterable) and not isinstance(obj, basestring):\n for item in obj:\n deref_list += self.build_dereference_list(all_objects, obj, None, item)\n return deref_list\n \n def unpack_objects(self, deref_list):\n for parent, key, orig, obj in deref_list:\n if key is None:\n parent.remove(orig)\n parent.append(obj)\n else:\n parent[key] = obj\n\n # Store the full path, separated into components, to a node inside the node\n # as \"pathComponents\". Also recurse into that node if it's a group.\n #\n def build_full_paths(self, node, base_path):\n # Some nodes are relative to a different source tree, specified as an\n # env variable.\n if node.get('sourceTree', '') != '':\n new_base_path = os.environ.get(node['sourceTree'], None)\n if new_base_path:\n base_path = splitpath(new_base_path)\n # Add the current node's path, if any.\n if node.get('path', False):\n base_path = base_path + splitpath(node['path'])\n node['pathComponents'] = base_path\n # Recurse if this is a group.\n if node['isa'] == 'PBXGroup':\n for child in node['children']:\n self.build_full_paths(child, base_path)\n elif node['isa'] == 'PBXProject':\n self.build_full_paths(node['mainGroup'], base_path)\n self.build_full_paths(node['productRefGroup'], base_path)\n for child in node['targets']:\n self.build_full_paths(child, base_path)\n projectRefs = node.get('projectReferences', None)\n if projectRefs is not None:\n for child in projectRefs[0].values():\n self.build_full_paths(child, base_path)\n\n # Fix up any inconvenient keys.\n #\n def fix_keys(self, obj):\n key_remappings = {'lastKnownFileType': 'fileType', 'explicitFileType': 'fileType'}\n for key in list(set(key_remappings.keys()) & set(obj.keys())):\n obj[key_remappings[key]] = obj[key]\n del obj[key]\n\n # Get the files from a build phase.\n #\n def get_build_phase_files(self, build_phase_name, filter_func):\n build_phase = filter(lambda x: x['isa'] == build_phase_name, self.target['buildPhases'])[0]\n build_files = filter(filter_func, build_phase['files'])\n return [x['fileRef'] for x in build_files]\n\n # Get the truncated paths of all headers that start with the specified\n # relative path. Paths are read and returned as fully separated lists.\n # e.g. ['Some', 'Path', 'To', 'A', 'Header'] with relative_path of\n # ['Some', 'Path'] gets truncated to ['To', 'A', 'Header']\n #\n def movable_headers_relative_to(self, relative_path):\n rel_path_length = len(relative_path)\n result = filter(lambda path: len(path) >= rel_path_length and\n path[:rel_path_length] == relative_path, self.header_paths)\n return [path[rel_path_length:] for path in result]\n\n # Get the full path to where a linkable archive (library or framework)\n # is supposed to be.\n #\n def get_linked_archive_path(self, architecture):\n return os.path.join(os.environ['OBJECT_FILE_DIR_%s' % os.environ['CURRENT_VARIANT']],\n architecture,\n os.environ['EXECUTABLE_NAME'])\n\n # Get the full path to our custom linked archive of the project.\n #\n def get_linked_ufw_archive_path(self, architecture):\n return self.get_linked_archive_path(architecture) + \".ufwbuild\"\n\n # Get the full path to the executable of an archive.\n #\n def get_exe_path(self, node):\n path = os.path.join(*node['pathComponents'])\n if node['fileType'] == 'wrapper.framework':\n # Frameworks are directories, so go one deeper\n path = os.path.join(path, os.path.splitext(node['pathComponents'][-1])[0])\n return path\n\n # Get the path to the directory containing the archive.\n #\n def get_containing_path(self, node):\n return os.path.join(*node['pathComponents'])\n \n def get_archive_search_paths(self):\n log.info(\"Search paths = %s\" % set([self.get_containing_path(fw) for fw in self.static_frameworks] + [self.get_containing_path(fw) for fw in self.static_libraries]))\n return set([self.get_containing_path(fw) for fw in self.static_frameworks] + [self.get_containing_path(fw) for fw in self.static_libraries])\n\n # Command to link all objects of a single architecture.\n #\n def get_single_arch_link_command(self, architecture):\n cmd = [self.libtool_path,\n \"-static\",\n \"-arch_only\", architecture,\n \"-syslibroot\", os.environ['SDKROOT'],\n \"-L%s\" % os.environ['TARGET_BUILD_DIR'],\n \"-filelist\", os.environ['LINK_FILE_LIST_%s_%s' % (os.environ['CURRENT_VARIANT'], architecture)]]\n if os.environ.get('OTHER_LDFLAGS', False):\n cmd += [os.environ['OTHER_LDFLAGS']]\n if os.environ.get('WARNING_LDFLAGS', False):\n cmd += [os.environ['WARNING_LDFLAGS']]\n# cmd += [\"-L%s\" % libpath for libpath in self.get_archive_search_paths()]\n cmd += [self.get_exe_path(fw) for fw in self.static_frameworks]\n cmd += [self.get_exe_path(lib) for lib in self.static_libraries]\n cmd += [\"-o\", self.get_linked_ufw_archive_path(architecture)]\n return cmd\n\n # Command to link all local architectures for the current configuration\n # into an archive. This reads all libraries + the UFW-built archives and\n # overwrites the final product.\n #\n def get_local_archs_link_command(self):\n cmd = [self.libtool_path,\n \"-static\"]\n cmd += self.local_linked_archive_paths\n cmd += [self.get_exe_path(fw) for fw in self.static_frameworks]\n cmd += [self.get_exe_path(lib) for lib in self.static_libraries]\n cmd += [\"-o\", os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['EXECUTABLE_PATH'])]\n return cmd\n\n # Command to link all architectures into a universal archive.\n # This reads all UFW-built archives and overwrites the final product.\n #\n def get_all_archs_link_command(self):\n cmd = [self.libtool_path,\n \"-static\"]\n cmd += self.local_linked_archive_paths + self.build_state.slave_linked_archive_paths\n cmd += [\"-o\", os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['EXECUTABLE_PATH'])]\n return cmd\n\n # Build up an environment for the slave process. This uses BUILD_ROOT\n # and TEMP_ROOT to convert all environment variables to values suitable\n # for the slave build environment so that xcodebuild doesn't try to build\n # in the project directory under \"build\".\n #\n def get_slave_environment(self):\n ignored = ['LD_MAP_FILE_PATH',\n 'HEADER_SEARCH_PATHS',\n 'LIBRARY_SEARCH_PATHS',\n 'FRAMEWORK_SEARCH_PATHS']\n build_root = os.environ['BUILD_ROOT']\n temp_root = os.environ['TEMP_ROOT']\n newenv = {}\n for key, value in os.environ.items():\n if key not in ignored and not key.startswith('LINK_FILE_LIST_') and not key.startswith('LD_DEPENDENCY_'):\n if build_root in value or temp_root in value:\n newenv[key] = value.replace(self.local_platform, self.other_platform)\n return newenv\n\n # Command to invoke xcodebuild on the slave platform.\n #\n def get_slave_project_build_command(self):\n cmd = [\"xcodebuild\",\n \"-project\",\n os.environ['PROJECT_FILE_PATH'],\n \"-target\",\n os.environ['TARGET_NAME'],\n \"-configuration\",\n os.environ['CONFIGURATION'],\n \"-sdk\",\n self.other_platform + self.sdk_version]\n cmd += [\"%s=%s\" % (key, value) for key, value in self.get_slave_environment().items()]\n cmd += [\"UFW_MASTER_PLATFORM=\" + os.environ['PLATFORM_NAME']]\n cmd += [os.environ['ACTION']]\n return cmd\n\n\n\n##############################################################################\n#\n# Utility Functions\n#\n##############################################################################\n\n# Split a path into a list of path components.\n#\ndef splitpath(path, maxdepth=20):\n (head, tail) = os.path.split(path)\n return splitpath(head, maxdepth - 1) + [tail] if maxdepth and head and head != path else [ head or tail ]\n\n# Remove all subdirectories under a path.\n#\ndef remove_subdirs(path, ignore_files):\n if os.path.exists(path):\n for filename in filter(lambda x: x not in ignore_files, os.listdir(path)):\n fullpath = os.path.join(path, filename)\n if os.path.isdir(fullpath):\n log.info(\"Remove %s\" % fullpath)\n shutil.rmtree(fullpath)\n\n# Make whatever parent paths are necessary for a path to exist.\n#\ndef ensure_path_exists(path):\n if not os.path.isdir(path):\n os.makedirs(path)\n\n# Make whatever parent paths are necessary for a path's parent to exist.\n#\ndef ensure_parent_exists(path):\n parent = os.path.dirname(path)\n if not os.path.isdir(parent):\n os.makedirs(parent)\n\n# Remove a file or dir if it exists.\n#\ndef remove_path(path):\n if os.path.exists(path):\n if os.path.isdir(path) and not os.path.islink(path):\n shutil.rmtree(path)\n else:\n os.remove(path)\n\n# Move a file or dir, replacing the destination if it exists.\n#\ndef move_file(src, dst):\n if src == dst or not os.path.isfile(src):\n return\n log.info(\"Move %s to %s\" % (src, dst))\n ensure_parent_exists(dst)\n remove_path(dst)\n shutil.move(src, dst)\n\n# Copy a file or dir, replacing the destination if it exists already.\n#\ndef copy_overwrite(src, dst):\n if src != dst:\n remove_path(dst)\n ensure_parent_exists(dst)\n shutil.copytree(src, dst, symlinks=True)\n\n# Attempt to symlink link_path -> link_to.\n# link_to must be a path relative to link_path's parent and must exist.\n# If link_path already exists, do nothing.\n#\ndef attempt_symlink(link_path, link_to):\n # Only allow linking to an existing file\n os.stat(os.path.abspath(os.path.join(link_path, \"..\", link_to)))\n\n # Only make the link if it hasn't already been made\n if not os.path.exists(link_path):\n log.info(\"Symlink %s -> %s\" % (link_path, link_to))\n os.symlink(link_to, link_path)\n\n# Takes the last entry in an array-based path and returns a normal path\n# relative to base_path.\n#\ndef top_level_file_path(base_path, path_list):\n return os.path.join(base_path, os.path.split(path_list[-1])[-1])\n\n# Takes all entries in an array-based path and returns a normal path\n# relative to base_path.\n#\ndef full_file_path(base_path, path_list):\n return os.path.join(*([base_path] + path_list))\n\n# Print a command before executing it.\n# Also print out all output from the command to STDOUT.\n#\ndef print_and_call(cmd):\n log.info(\"Cmd \" + \" \".join(cmd))\n p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)\n result = p.communicate()[0]\n if len(result) > 0:\n log.info(result)\n if p.returncode != 0:\n raise subprocess.CalledProcessError(p.returncode, cmd)\n\n# Special print-and-call command for the slave build that strips out\n# xcodebuild's spammy list of environment variables.\n#\ndef print_and_call_slave_build(cmd, other_platform):\n separator = '=== BUILD NATIVE TARGET '\n p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)\n result = p.communicate()[0].split(separator)\n if len(result) == 1:\n result = result[0]\n else:\n result = separator + result[1]\n log.info(\"Cmd \" + \" \".join(cmd) + \"\\n\" + result)\n if p.returncode != 0:\n raise subprocess.CalledProcessError(p.returncode, cmd)\n\n# Issue a warning and record that a warning has been issued.\n#\ndef issue_warning(msg, *args, **kwargs):\n global issued_warnings\n issued_warnings = True\n log.warn(msg, *args, **kwargs)\n\n\n\n##############################################################################\n#\n# Main Application\n#\n##############################################################################\n\n# Check if we are running as master.\n#\ndef is_master():\n return os.environ.get('UFW_MASTER_PLATFORM', os.environ['PLATFORM_NAME']) == os.environ['PLATFORM_NAME']\n\n# DerivedData should almost never appear in any framework, library, or header\n# search paths. However, Xcode will sometimes add them in, so we check to make\n# sure.\n#\ndef check_for_derived_data_in_search_paths(project):\n search_path_keys = [\"FRAMEWORK_SEARCH_PATHS\", \"LIBRARY_SEARCH_PATHS\", \"HEADER_SEARCH_PATHS\"]\n build_configs = project.target['buildConfigurationList']['buildConfigurations']\n build_settings = filter(lambda x: x['name'] == os.environ['CONFIGURATION'], build_configs)[0]['buildSettings']\n \n found_something = False\n for path_key in filter(lambda x: x in build_settings, search_path_keys):\n path = build_settings[path_key]\n if \"DerivedData\" in path:\n found_something = True\n log.warn(\"Derived data in %s\" % path)\n issue_warning(\"'%s' contains reference to 'DerivedData'.\" % path_key)\n if found_something:\n log.warn(\"Check your build settings and remove any entries that contain paths inside the DerivedData folder.\")\n log.warn(\"Otherwise you can disable this warning by changing 'config_warn_derived_data' in this script.\")\n\n# Link local architectures into their respective archives.\n#\ndef link_local_archs(project):\n for arch in project.local_architectures:\n print_and_call(project.get_single_arch_link_command(arch))\n\n# Link only the local architectures into the final product, not the slave\n# architectures. For iphoneos, this will be armv6, armv7. For simulator, this\n# will be i386.\n#\ndef link_combine_local_archs(project):\n print_and_call(project.get_local_archs_link_command())\n\n# Link all architectures into the final product.\n#\ndef link_combine_all_archs(project):\n print_and_call(project.get_all_archs_link_command())\n\n# Check if we should open the build directory after a successful build.\n#\ndef should_open_build_dir():\n env_setting = os.environ.get('UFW_OPEN_BUILD_DIR', None)\n if env_setting is not None:\n return env_setting\n\n return config_open_build_dir\n\n# Open the build dir in Finder.\n#\ndef open_build_dir():\n print_and_call(['open', os.environ['TARGET_BUILD_DIR']])\n\n# Check if the build was started by selecting \"Archive\" under \"Product\" in\n# Xcode.\n#\ndef is_archive_build():\n # ACTION is always 'build', but perhaps Apple will fix this someday?\n archive_build = os.environ['ACTION'] == 'archive'\n\n if not archive_build:\n # This can be passed in as an env variable when building from command line.\n archive_build = os.environ.get('UFW_ACTION', None) == 'archive'\n\n build_dir = splitpath(os.environ['BUILD_DIR'])\n if not archive_build:\n # This partial path is used when you select \"archive\" from within Xcode.\n archive_build = 'ArchiveIntermediates' in build_dir\n\n # It only counts as a full archive build if this target is being built into\n # its own build dir (not being built as a dependency of another target)\n if archive_build:\n archive_build = os.environ['TARGET_NAME'] in build_dir\n \n return archive_build\n\n# Xcode by default throws all public headers into the top level directory.\n# This function moves them to their expected deep hierarchy.\n#\ndef build_deep_header_hierarchy(project):\n header_path_top = config_deep_header_top\n if not header_path_top:\n header_path_top = os.path.commonprefix(project.header_paths)\n else:\n header_path_top = splitpath(header_path_top)\n\n built_headers_path = os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['PUBLIC_HEADERS_FOLDER_PATH'])\n movable_headers = project.movable_headers_relative_to(header_path_top)\n\n # Remove subdirs if they only contain files that have been rebuilt\n ignore_headers = filter(lambda x: not os.path.isfile(top_level_file_path(built_headers_path, x)), movable_headers)\n remove_subdirs(built_headers_path, [file[0] for file in ignore_headers])\n\n # Move rebuilt headers into their proper subdirs\n for header in movable_headers:\n move_file(top_level_file_path(built_headers_path, header), full_file_path(built_headers_path, header))\n\n# Add all symlinks needed to make a full framework structure:\n#\n# MyFramework.framework\n# |-- MyFramework -> Versions/Current/MyFramework\n# |-- Headers -> Versions/Current/Headers\n# |-- Resources -> Versions/Current/Resources\n# `-- Versions\n# |-- A\n# | |-- MyFramework\n# | |-- Headers\n# | | `-- MyFramework.h\n# | `-- Resources\n# | |-- Info.plist\n# | |-- MyViewController.nib\n# | `-- en.lproj\n# | `-- InfoPlist.strings\n# `-- Current -> A\n#\ndef add_symlinks_to_framework(project):\n base_dir = project.local_built_fw_path\n attempt_symlink(os.path.join(base_dir, \"Versions\", \"Current\"), os.environ['FRAMEWORK_VERSION'])\n if os.path.isdir(os.path.join(base_dir, \"Versions\", \"Current\", \"Headers\")):\n attempt_symlink(os.path.join(base_dir, \"Headers\"), os.path.join(\"Versions\", \"Current\", \"Headers\"))\n if os.path.isdir(os.path.join(base_dir, \"Versions\", \"Current\", \"Resources\")):\n attempt_symlink(os.path.join(base_dir, \"Resources\"), os.path.join(\"Versions\", \"Current\", \"Resources\"))\n attempt_symlink(os.path.join(base_dir, os.environ['EXECUTABLE_NAME']), os.path.join(\"Versions\", \"Current\", os.environ['EXECUTABLE_NAME']))\n\n# Build an embedded framework structure.\n# An embedded framework contains the actual framework, plus a \"Resources\"\n# directory containing symlinks to all resources found in the actual framework,\n# with the exception of \"Info.plist\" and anything ending in \".lproj\":\n#\n# MyFramework.embeddedframework\n# |-- MyFramework.framework\n# | |-- MyFramework -> Versions/Current/MyFramework\n# | |-- Headers -> Versions/Current/Headers\n# | |-- Resources -> Versions/Current/Resources\n# | `-- Versions\n# | |-- A\n# | | |-- MyFramework\n# | | |-- Headers\n# | | | `-- MyFramework.h\n# | | `-- Resources\n# | | |-- Info.plist\n# | | |-- MyViewController.nib\n# | | `-- en.lproj\n# | | `-- InfoPlist.strings\n# | `-- Current -> A\n# `-- Resources\n# `-- MyViewController.nib -> ../MyFramework.framework/Resources/MyViewController.nib\n#\ndef build_embedded_framework(project):\n fw_path = project.local_built_fw_path\n embedded_path = project.local_built_embedded_fw_path\n fw_name = os.environ['WRAPPER_NAME']\n\n if (os.path.islink(fw_path)):\n # If the framework path is a link, the build result already in embeddedframework.\n # Just recreate embeddedframework's Resources\n remove_path(os.path.join(embedded_path, \"Resources\"))\n else:\n remove_path(embedded_path)\n ensure_path_exists(embedded_path)\n copy_overwrite(fw_path, os.path.join(embedded_path, fw_name))\n\n # Create embeddedframework's Resources \n ensure_path_exists(os.path.join(embedded_path, \"Resources\"))\n symlink_source = os.path.join(\"..\", fw_name, \"Resources\")\n symlink_path = os.path.join(embedded_path, \"Resources\")\n if os.path.isdir(os.path.join(fw_path, \"Resources\")):\n for file in filter(lambda x: x != \"Info.plist\" and not x.endswith(\".lproj\"), os.listdir(os.path.join(fw_path, \"Resources\"))):\n attempt_symlink(os.path.join(symlink_path, file), os.path.join(symlink_source, file))\n\n # Remove the normal framework and replace it with a symlink to the copy\n # in the embedded framework. This is needed because Xcode runs its strip\n # phase AFTER the script runs.\n embed_fw_wrapper = os.path.splitext(os.environ['WRAPPER_NAME'])[0] + \".embeddedframework\"\n remove_path(fw_path)\n attempt_symlink(fw_path, os.path.join(embed_fw_wrapper, os.environ['WRAPPER_NAME']))\n\n\n# Run the build process in slave mode to build the other configuration\n# (device/simulator).\n#\ndef run_slave_build(project):\n print_and_call_slave_build(project.get_slave_project_build_command(), project.other_platform)\n\n# Run the build process.\n#\ndef run_build():\n project = Project(os.path.join(os.environ['PROJECT_FILE_PATH'], \"project.pbxproj\"))\n\n # Issue warnings only if we're master.\n if is_master():\n if len(project.compilable_sources) == 0:\n raise Exception(\"No compilable sources found. Please add at least one source file to build target %s.\" % os.environ['TARGET_NAME'])\n\n if config_warn_derived_data:\n check_for_derived_data_in_search_paths(project)\n if config_warn_no_public_headers and len(project.public_headers) == 0:\n issue_warning('No headers in build target %s were marked public. Please move at least one header to \"Public\" in the \"Copy Headers\" build phase.' % os.environ['TARGET_NAME'])\n\n # Only build slave if this is an archive build.\n if is_archive_build():\n if is_master():\n log.debug(\"Building as MASTER\")\n # The slave-side linker tries to include this (nonexistent) path as\n # a library path.\n ensure_path_exists(project.get_slave_environment()['BUILT_PRODUCTS_DIR'])\n project.build_state.persist()\n run_slave_build(project)\n project.build_state.reload()\n else:\n log.debug(\"Building as SLAVE\")\n project.build_state.reload()\n project.build_state.set_slave_properties(project.local_architectures,\n project.local_linked_archive_paths,\n project.local_built_fw_path,\n project.local_built_embedded_fw_path)\n project.build_state.persist()\n\n link_local_archs(project)\n \n # Only do a universal binary when building an archive.\n if is_archive_build() and is_master():\n link_combine_all_archs(project)\n else:\n link_combine_local_archs(project)\n\n if config_deep_header_hierarchy:\n build_deep_header_hierarchy(project)\n\n add_symlinks_to_framework(project)\n \n if is_master():\n if config_framework_type == 'embeddedframework':\n build_embedded_framework(project)\n elif config_framework_type != 'framework':\n raise Exception(\"%s: Unknown framework type for config_framework_type\" % config_framework_type)\n\n\nif __name__ == \"__main__\":\n log_handler = logging.StreamHandler()\n log_handler.setFormatter(logging.Formatter(\"%(name)s (\" + os.environ['PLATFORM_NAME'] + \"): %(levelname)s: %(message)s\"))\n log.addHandler(log_handler)\n log.setLevel(config_log_level)\n\n error_code = 0\n prefix = \"M\" if is_master() else \"S\"\n log_handler.setFormatter(logging.Formatter(\"%(name)s (\" + prefix + \" \" + os.environ['PLATFORM_NAME'] + \"): %(levelname)s: %(message)s\"))\n\n log.debug(\"Begin build process\")\n\n if config_deep_header_top:\n config_deep_header_top = string.Template(config_deep_header_top).substitute(os.environ)\n\n try:\n run_build()\n if issued_warnings:\n if config_fail_on_warnings:\n error_code = 1\n log.warn(\"Build completed with warnings\")\n else:\n log.info(\"Build completed\")\n if not is_archive_build():\n log.info(\"Note: This is *NOT* a universal framework build. To build as a universal framework, do an archive build.\")\n log.info(\"To do an archive build from command line, use \\\"xcodebuild -configuration Release UFW_ACTION=archive clean build\\\"\")\n except Exception:\n traceback.print_exc(file=sys.stdout)\n error_code = 1\n log.error(\"Build failed\")\n finally:\n if error_code == 0 and is_archive_build() and is_master():\n log.info(\"Built framework is in \" + os.environ['TARGET_BUILD_DIR'])\n if should_open_build_dir():\n open_build_dir()\n sys.exit(error_code)\n"; 335 | showEnvVarsInLog = 0; 336 | }; 337 | CCB9E27BC12BE0CFC403EC4B /* Copy Pods Resources */ = { 338 | isa = PBXShellScriptBuildPhase; 339 | buildActionMask = 2147483647; 340 | files = ( 341 | ); 342 | inputPaths = ( 343 | ); 344 | name = "Copy Pods Resources"; 345 | outputPaths = ( 346 | ); 347 | runOnlyForDeploymentPostprocessing = 0; 348 | shellPath = /bin/sh; 349 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; 350 | showEnvVarsInLog = 0; 351 | }; 352 | /* End PBXShellScriptBuildPhase section */ 353 | 354 | /* Begin PBXSourcesBuildPhase section */ 355 | 0E71BF631AA14A1B001556A1 /* Sources */ = { 356 | isa = PBXSourcesBuildPhase; 357 | buildActionMask = 2147483647; 358 | files = ( 359 | ); 360 | runOnlyForDeploymentPostprocessing = 0; 361 | }; 362 | E19AA2051A6EEABA005BD20E /* Sources */ = { 363 | isa = PBXSourcesBuildPhase; 364 | buildActionMask = 2147483647; 365 | files = ( 366 | E1D5A68D1A7AF53A00584810 /* BOXSampleAppListViewController.m in Sources */, 367 | E19AA2151A6EEABA005BD20E /* ViewController.m in Sources */, 368 | E19AA2121A6EEABA005BD20E /* AppDelegate.m in Sources */, 369 | E19AA20F1A6EEABA005BD20E /* main.m in Sources */, 370 | ); 371 | runOnlyForDeploymentPostprocessing = 0; 372 | }; 373 | E19AA21E1A6EEABA005BD20E /* Sources */ = { 374 | isa = PBXSourcesBuildPhase; 375 | buildActionMask = 2147483647; 376 | files = ( 377 | E19AA2291A6EEABA005BD20E /* BoxShareSDKSampleAppTests.m in Sources */, 378 | ); 379 | runOnlyForDeploymentPostprocessing = 0; 380 | }; 381 | /* End PBXSourcesBuildPhase section */ 382 | 383 | /* Begin PBXTargetDependency section */ 384 | E19AA2241A6EEABA005BD20E /* PBXTargetDependency */ = { 385 | isa = PBXTargetDependency; 386 | target = E19AA2081A6EEABA005BD20E /* BoxShareSDKSampleApp */; 387 | targetProxy = E19AA2231A6EEABA005BD20E /* PBXContainerItemProxy */; 388 | }; 389 | /* End PBXTargetDependency section */ 390 | 391 | /* Begin PBXVariantGroup section */ 392 | 0E24BF261A7AF2C500BD6C97 /* Main.storyboard */ = { 393 | isa = PBXVariantGroup; 394 | children = ( 395 | 0E24BF271A7AF2C500BD6C97 /* Base */, 396 | ); 397 | name = Main.storyboard; 398 | sourceTree = ""; 399 | }; 400 | E19AA21B1A6EEABA005BD20E /* LaunchScreen.xib */ = { 401 | isa = PBXVariantGroup; 402 | children = ( 403 | E19AA21C1A6EEABA005BD20E /* Base */, 404 | ); 405 | name = LaunchScreen.xib; 406 | sourceTree = ""; 407 | }; 408 | /* End PBXVariantGroup section */ 409 | 410 | /* Begin XCBuildConfiguration section */ 411 | 0E71BF751AA14A1B001556A1 /* Debug */ = { 412 | isa = XCBuildConfiguration; 413 | buildSettings = { 414 | CONTENTS_FOLDER_PATH = "$(WRAPPER_NAME)/Versions/$(FRAMEWORK_VERSION)"; 415 | DEAD_CODE_STRIPPING = NO; 416 | DYLIB_COMPATIBILITY_VERSION = 1; 417 | DYLIB_CURRENT_VERSION = 1; 418 | FRAMEWORK_VERSION = A; 419 | GCC_PREPROCESSOR_DEFINITIONS = ( 420 | "DEBUG=1", 421 | "$(inherited)", 422 | ); 423 | GCC_THUMB_SUPPORT = NO; 424 | INFOPLIST_FILE = BoxShareSDK/Info.plist; 425 | INFOPLIST_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Info.plist"; 426 | INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; 427 | LINK_WITH_STANDARD_LIBRARIES = NO; 428 | MACH_O_TYPE = mh_object; 429 | PRODUCT_NAME = "$(TARGET_NAME)"; 430 | SKIP_INSTALL = YES; 431 | UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Resources"; 432 | WRAPPER_EXTENSION = framework; 433 | }; 434 | name = Debug; 435 | }; 436 | 0E71BF761AA14A1B001556A1 /* Release */ = { 437 | isa = XCBuildConfiguration; 438 | buildSettings = { 439 | CONTENTS_FOLDER_PATH = "$(WRAPPER_NAME)/Versions/$(FRAMEWORK_VERSION)"; 440 | DEAD_CODE_STRIPPING = NO; 441 | DYLIB_COMPATIBILITY_VERSION = 1; 442 | DYLIB_CURRENT_VERSION = 1; 443 | FRAMEWORK_VERSION = A; 444 | GCC_THUMB_SUPPORT = NO; 445 | INFOPLIST_FILE = BoxShareSDK/Info.plist; 446 | INFOPLIST_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Info.plist"; 447 | INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; 448 | LINK_WITH_STANDARD_LIBRARIES = NO; 449 | MACH_O_TYPE = mh_object; 450 | PRODUCT_NAME = "$(TARGET_NAME)"; 451 | SKIP_INSTALL = YES; 452 | UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Resources"; 453 | WRAPPER_EXTENSION = framework; 454 | }; 455 | name = Release; 456 | }; 457 | E19AA22A1A6EEABA005BD20E /* Debug */ = { 458 | isa = XCBuildConfiguration; 459 | buildSettings = { 460 | ALWAYS_SEARCH_USER_PATHS = NO; 461 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 462 | CLANG_CXX_LIBRARY = "libc++"; 463 | CLANG_ENABLE_MODULES = YES; 464 | CLANG_ENABLE_OBJC_ARC = YES; 465 | CLANG_WARN_BOOL_CONVERSION = YES; 466 | CLANG_WARN_CONSTANT_CONVERSION = YES; 467 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 468 | CLANG_WARN_EMPTY_BODY = YES; 469 | CLANG_WARN_ENUM_CONVERSION = YES; 470 | CLANG_WARN_INT_CONVERSION = YES; 471 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 472 | CLANG_WARN_UNREACHABLE_CODE = YES; 473 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 474 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 475 | COPY_PHASE_STRIP = NO; 476 | ENABLE_STRICT_OBJC_MSGSEND = YES; 477 | GCC_C_LANGUAGE_STANDARD = gnu99; 478 | GCC_DYNAMIC_NO_PIC = NO; 479 | GCC_OPTIMIZATION_LEVEL = 0; 480 | GCC_PREPROCESSOR_DEFINITIONS = ( 481 | "DEBUG=1", 482 | "$(inherited)", 483 | ); 484 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 485 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 486 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 487 | GCC_WARN_UNDECLARED_SELECTOR = YES; 488 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 489 | GCC_WARN_UNUSED_FUNCTION = YES; 490 | GCC_WARN_UNUSED_VARIABLE = YES; 491 | IPHONEOS_DEPLOYMENT_TARGET = 8.1; 492 | MTL_ENABLE_DEBUG_INFO = YES; 493 | ONLY_ACTIVE_ARCH = YES; 494 | SDKROOT = iphoneos; 495 | TARGETED_DEVICE_FAMILY = "1,2"; 496 | }; 497 | name = Debug; 498 | }; 499 | E19AA22B1A6EEABA005BD20E /* Release */ = { 500 | isa = XCBuildConfiguration; 501 | buildSettings = { 502 | ALWAYS_SEARCH_USER_PATHS = NO; 503 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 504 | CLANG_CXX_LIBRARY = "libc++"; 505 | CLANG_ENABLE_MODULES = YES; 506 | CLANG_ENABLE_OBJC_ARC = YES; 507 | CLANG_WARN_BOOL_CONVERSION = YES; 508 | CLANG_WARN_CONSTANT_CONVERSION = YES; 509 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 510 | CLANG_WARN_EMPTY_BODY = YES; 511 | CLANG_WARN_ENUM_CONVERSION = YES; 512 | CLANG_WARN_INT_CONVERSION = YES; 513 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 514 | CLANG_WARN_UNREACHABLE_CODE = YES; 515 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 516 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 517 | COPY_PHASE_STRIP = YES; 518 | ENABLE_NS_ASSERTIONS = NO; 519 | ENABLE_STRICT_OBJC_MSGSEND = YES; 520 | GCC_C_LANGUAGE_STANDARD = gnu99; 521 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 522 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 523 | GCC_WARN_UNDECLARED_SELECTOR = YES; 524 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 525 | GCC_WARN_UNUSED_FUNCTION = YES; 526 | GCC_WARN_UNUSED_VARIABLE = YES; 527 | IPHONEOS_DEPLOYMENT_TARGET = 8.1; 528 | MTL_ENABLE_DEBUG_INFO = NO; 529 | SDKROOT = iphoneos; 530 | TARGETED_DEVICE_FAMILY = "1,2"; 531 | VALIDATE_PRODUCT = YES; 532 | }; 533 | name = Release; 534 | }; 535 | E19AA22D1A6EEABA005BD20E /* Debug */ = { 536 | isa = XCBuildConfiguration; 537 | baseConfigurationReference = 43ADE487D008E0CF1B8D71A1 /* Pods.debug.xcconfig */; 538 | buildSettings = { 539 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 540 | INFOPLIST_FILE = BoxShareSDKSampleApp/Info.plist; 541 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 542 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 543 | PRODUCT_NAME = BoxShareSDKSampleApp; 544 | }; 545 | name = Debug; 546 | }; 547 | E19AA22E1A6EEABA005BD20E /* Release */ = { 548 | isa = XCBuildConfiguration; 549 | baseConfigurationReference = 90F93E9121EE2D8A0201F268 /* Pods.release.xcconfig */; 550 | buildSettings = { 551 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 552 | INFOPLIST_FILE = BoxShareSDKSampleApp/Info.plist; 553 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 554 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 555 | PRODUCT_NAME = BoxShareSDKSampleApp; 556 | }; 557 | name = Release; 558 | }; 559 | E19AA2301A6EEABA005BD20E /* Debug */ = { 560 | isa = XCBuildConfiguration; 561 | buildSettings = { 562 | BUNDLE_LOADER = "$(TEST_HOST)"; 563 | FRAMEWORK_SEARCH_PATHS = ( 564 | "$(SDKROOT)/Developer/Library/Frameworks", 565 | "$(inherited)", 566 | ); 567 | GCC_PREPROCESSOR_DEFINITIONS = ( 568 | "DEBUG=1", 569 | "$(inherited)", 570 | ); 571 | INFOPLIST_FILE = BoxShareSDKSampleAppTests/Info.plist; 572 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 573 | PRODUCT_NAME = BoxShareSDKSampleAppTests; 574 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BoxShareSDKSampleApp.app/BoxShareSDKSampleApp"; 575 | }; 576 | name = Debug; 577 | }; 578 | E19AA2311A6EEABA005BD20E /* Release */ = { 579 | isa = XCBuildConfiguration; 580 | buildSettings = { 581 | BUNDLE_LOADER = "$(TEST_HOST)"; 582 | FRAMEWORK_SEARCH_PATHS = ( 583 | "$(SDKROOT)/Developer/Library/Frameworks", 584 | "$(inherited)", 585 | ); 586 | INFOPLIST_FILE = BoxShareSDKSampleAppTests/Info.plist; 587 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 588 | PRODUCT_NAME = BoxShareSDKSampleAppTests; 589 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BoxShareSDKSampleApp.app/BoxShareSDKSampleApp"; 590 | }; 591 | name = Release; 592 | }; 593 | /* End XCBuildConfiguration section */ 594 | 595 | /* Begin XCConfigurationList section */ 596 | 0E71BF771AA14A1B001556A1 /* Build configuration list for PBXNativeTarget "BoxShareSDK" */ = { 597 | isa = XCConfigurationList; 598 | buildConfigurations = ( 599 | 0E71BF751AA14A1B001556A1 /* Debug */, 600 | 0E71BF761AA14A1B001556A1 /* Release */, 601 | ); 602 | defaultConfigurationIsVisible = 0; 603 | defaultConfigurationName = Release; 604 | }; 605 | E19AA2041A6EEABA005BD20E /* Build configuration list for PBXProject "BoxShareSDKSampleApp" */ = { 606 | isa = XCConfigurationList; 607 | buildConfigurations = ( 608 | E19AA22A1A6EEABA005BD20E /* Debug */, 609 | E19AA22B1A6EEABA005BD20E /* Release */, 610 | ); 611 | defaultConfigurationIsVisible = 0; 612 | defaultConfigurationName = Release; 613 | }; 614 | E19AA22C1A6EEABA005BD20E /* Build configuration list for PBXNativeTarget "BoxShareSDKSampleApp" */ = { 615 | isa = XCConfigurationList; 616 | buildConfigurations = ( 617 | E19AA22D1A6EEABA005BD20E /* Debug */, 618 | E19AA22E1A6EEABA005BD20E /* Release */, 619 | ); 620 | defaultConfigurationIsVisible = 0; 621 | defaultConfigurationName = Release; 622 | }; 623 | E19AA22F1A6EEABA005BD20E /* Build configuration list for PBXNativeTarget "BoxShareSDKSampleAppTests" */ = { 624 | isa = XCConfigurationList; 625 | buildConfigurations = ( 626 | E19AA2301A6EEABA005BD20E /* Debug */, 627 | E19AA2311A6EEABA005BD20E /* Release */, 628 | ); 629 | defaultConfigurationIsVisible = 0; 630 | defaultConfigurationName = Release; 631 | }; 632 | /* End XCConfigurationList section */ 633 | }; 634 | rootObject = E19AA2011A6EEABA005BD20E /* Project object */; 635 | } 636 | --------------------------------------------------------------------------------