├── .gitignore ├── HelloSwiftAndCPP ├── HelloSwiftAndCPP-Bridging-Header.h ├── ABCpp.h ├── SomeCPPClass.cpp ├── XYZSomething.m ├── XYZSomething.h ├── ABCpp.mm ├── main.swift └── SomeCPPClass.h ├── HelloSwiftAndCPP.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | Builds/ 2 | /DerivedData 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP/HelloSwiftAndCPP-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "ABCpp.h" 6 | #import "XYZSomething.h" -------------------------------------------------------------------------------- /HelloSwiftAndCPP.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP/ABCpp.h: -------------------------------------------------------------------------------- 1 | // 2 | // ABCpp.h 3 | // HelloSwiftAndCPP 4 | // 5 | // Created by Ron Olson on 6/12/14. 6 | // Copyright (c) 2014 Ron Olson. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface ABCpp : NSObject 13 | 14 | -(int)playWithFoo; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP/SomeCPPClass.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // SomeCPPClass.cpp 3 | // HelloSwiftAndCPP 4 | // 5 | // Created by Ron Olson on 6/12/14. 6 | // Copyright (c) 2014 Ron Olson. All rights reserved. 7 | // 8 | 9 | #include "SomeCPPClass.h" 10 | 11 | 12 | int Foo::addNums(int x, int y) 13 | { 14 | return x + y; 15 | } 16 | 17 | 18 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP/XYZSomething.m: -------------------------------------------------------------------------------- 1 | // 2 | // XYZSomething.m 3 | // HelloSwiftAndCPP 4 | // 5 | // Created by Ron Olson on 6/12/14. 6 | // Copyright (c) 2014 Ron Olson. All rights reserved. 7 | // 8 | 9 | #import "XYZSomething.h" 10 | 11 | @implementation XYZSomething 12 | 13 | -(int)addX:(int)x andY:(int)y 14 | { 15 | return x + y; 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP/XYZSomething.h: -------------------------------------------------------------------------------- 1 | // 2 | // XYZSomething.h 3 | // HelloSwiftAndCPP 4 | // 5 | // Created by Ron Olson on 6/12/14. 6 | // Copyright (c) 2014 Ron Olson. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface XYZSomething : NSObject 12 | { 13 | int z; 14 | } 15 | 16 | -(int)addX:(int)x andY:(int)y; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP/ABCpp.mm: -------------------------------------------------------------------------------- 1 | // 2 | // ABCpp.m 3 | // HelloSwiftAndCPP 4 | // 5 | // Created by Ron Olson on 6/12/14. 6 | // Copyright (c) 2014 Ron Olson. All rights reserved. 7 | // 8 | 9 | #import "ABCpp.h" 10 | #include "SomeCPPClass.h" 11 | 12 | @implementation ABCpp 13 | 14 | -(int)playWithFoo 15 | { 16 | Foo foo; 17 | 18 | return foo.addNums(25, 25); 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // main.swift 3 | // HelloSwiftAndCPP 4 | // 5 | // Created by Ron Olson on 6/12/14. 6 | // Copyright (c) 2014 Ron Olson. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | print("Hello, World!") 12 | 13 | let foo = XYZSomething() 14 | 15 | print("Val is \(foo.addX(50, andY: 50))") 16 | 17 | let bar = ABCpp(); 18 | 19 | print("And from CPP the value is \(bar.playWithFoo())") 20 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP/SomeCPPClass.h: -------------------------------------------------------------------------------- 1 | // 2 | // SomeCPPClass.h 3 | // HelloSwiftAndCPP 4 | // 5 | // Created by Ron Olson on 6/12/14. 6 | // Copyright (c) 2014 Ron Olson. All rights reserved. 7 | // 8 | 9 | #ifndef __somecppclass__ 10 | #define __somecppclass__ 11 | 12 | #include 13 | #include 14 | using std::cout; 15 | using std::endl; 16 | using std::string; 17 | 18 | class Foo 19 | { 20 | public: 21 | 22 | Foo() 23 | { 24 | cout << "In the foo!" << endl; 25 | 26 | string someString("hello from a C++ constructor!"); 27 | cout << someString << endl; 28 | } 29 | 30 | int addNums(int x, int y); 31 | 32 | }; 33 | 34 | #endif -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | HelloSwiftAndCPP 2 | ================ 3 | 4 | A sample project that mixes Apple's Swift language with Objective C and C++. I wrote it trying to figure out how I can add existing C++ code into a Swift project. It's meant to be C++/ObjC/Swift 101 just to show the interop between the three, without getting bogged down in frameworks. 5 | 6 | main.swift 7 | - The main program that calls both Objective C and C++ (via Objective C++) code 8 | 9 | SomeCPPClass.cpp/h 10 | - A regular C++ class using iostream and string 11 | 12 | HelloSwiftAndCPP-Bridging-Header.h 13 | - The file necessary to expose the Objective C/C++ classes to Swift 14 | 15 | XYZSomething.m/h 16 | - Basic Objective C class 17 | 18 | ABCpp.mm/h 19 | - Objective C++ class that uses SomeCPPClass 20 | 21 | 22 | -------------------------------------------------------------------------------- /HelloSwiftAndCPP.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0FB0086A1949E50A0014F78F /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB008691949E50A0014F78F /* main.swift */; }; 11 | 0FB00875194A1BE40014F78F /* SomeCPPClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FB00874194A1BE40014F78F /* SomeCPPClass.cpp */; }; 12 | 0FB00878194A22390014F78F /* XYZSomething.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FB00877194A22390014F78F /* XYZSomething.m */; }; 13 | 0FB0087B194A23AF0014F78F /* ABCpp.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FB0087A194A23AF0014F78F /* ABCpp.mm */; }; 14 | /* End PBXBuildFile section */ 15 | 16 | /* Begin PBXCopyFilesBuildPhase section */ 17 | 0FB008641949E50A0014F78F /* CopyFiles */ = { 18 | isa = PBXCopyFilesBuildPhase; 19 | buildActionMask = 2147483647; 20 | dstPath = /usr/share/man/man1/; 21 | dstSubfolderSpec = 0; 22 | files = ( 23 | ); 24 | runOnlyForDeploymentPostprocessing = 1; 25 | }; 26 | /* End PBXCopyFilesBuildPhase section */ 27 | 28 | /* Begin PBXFileReference section */ 29 | 0FB008661949E50A0014F78F /* HelloSwiftAndCPP */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = HelloSwiftAndCPP; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | 0FB008691949E50A0014F78F /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 31 | 0FB008701949E5550014F78F /* HelloSwiftAndCPP-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HelloSwiftAndCPP-Bridging-Header.h"; sourceTree = ""; }; 32 | 0FB008731949E5C50014F78F /* SomeCPPClass.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SomeCPPClass.h; sourceTree = ""; }; 33 | 0FB00874194A1BE40014F78F /* SomeCPPClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SomeCPPClass.cpp; sourceTree = ""; }; 34 | 0FB00876194A22390014F78F /* XYZSomething.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XYZSomething.h; sourceTree = ""; }; 35 | 0FB00877194A22390014F78F /* XYZSomething.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XYZSomething.m; sourceTree = ""; }; 36 | 0FB00879194A23AF0014F78F /* ABCpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ABCpp.h; sourceTree = ""; }; 37 | 0FB0087A194A23AF0014F78F /* ABCpp.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = ABCpp.mm; sourceTree = ""; }; 38 | /* End PBXFileReference section */ 39 | 40 | /* Begin PBXFrameworksBuildPhase section */ 41 | 0FB008631949E50A0014F78F /* Frameworks */ = { 42 | isa = PBXFrameworksBuildPhase; 43 | buildActionMask = 2147483647; 44 | files = ( 45 | ); 46 | runOnlyForDeploymentPostprocessing = 0; 47 | }; 48 | /* End PBXFrameworksBuildPhase section */ 49 | 50 | /* Begin PBXGroup section */ 51 | 0FB0085D1949E50A0014F78F = { 52 | isa = PBXGroup; 53 | children = ( 54 | 0FB008681949E50A0014F78F /* HelloSwiftAndCPP */, 55 | 0FB008671949E50A0014F78F /* Products */, 56 | ); 57 | sourceTree = ""; 58 | }; 59 | 0FB008671949E50A0014F78F /* Products */ = { 60 | isa = PBXGroup; 61 | children = ( 62 | 0FB008661949E50A0014F78F /* HelloSwiftAndCPP */, 63 | ); 64 | name = Products; 65 | sourceTree = ""; 66 | }; 67 | 0FB008681949E50A0014F78F /* HelloSwiftAndCPP */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | 0FB008691949E50A0014F78F /* main.swift */, 71 | 0FB00874194A1BE40014F78F /* SomeCPPClass.cpp */, 72 | 0FB008731949E5C50014F78F /* SomeCPPClass.h */, 73 | 0FB008701949E5550014F78F /* HelloSwiftAndCPP-Bridging-Header.h */, 74 | 0FB00876194A22390014F78F /* XYZSomething.h */, 75 | 0FB00877194A22390014F78F /* XYZSomething.m */, 76 | 0FB00879194A23AF0014F78F /* ABCpp.h */, 77 | 0FB0087A194A23AF0014F78F /* ABCpp.mm */, 78 | ); 79 | path = HelloSwiftAndCPP; 80 | sourceTree = ""; 81 | }; 82 | /* End PBXGroup section */ 83 | 84 | /* Begin PBXNativeTarget section */ 85 | 0FB008651949E50A0014F78F /* HelloSwiftAndCPP */ = { 86 | isa = PBXNativeTarget; 87 | buildConfigurationList = 0FB0086D1949E50A0014F78F /* Build configuration list for PBXNativeTarget "HelloSwiftAndCPP" */; 88 | buildPhases = ( 89 | 0FB008621949E50A0014F78F /* Sources */, 90 | 0FB008631949E50A0014F78F /* Frameworks */, 91 | 0FB008641949E50A0014F78F /* CopyFiles */, 92 | ); 93 | buildRules = ( 94 | ); 95 | dependencies = ( 96 | ); 97 | name = HelloSwiftAndCPP; 98 | productName = HelloSwiftAndCPP; 99 | productReference = 0FB008661949E50A0014F78F /* HelloSwiftAndCPP */; 100 | productType = "com.apple.product-type.tool"; 101 | }; 102 | /* End PBXNativeTarget section */ 103 | 104 | /* Begin PBXProject section */ 105 | 0FB0085E1949E50A0014F78F /* Project object */ = { 106 | isa = PBXProject; 107 | attributes = { 108 | LastUpgradeCheck = 1030; 109 | ORGANIZATIONNAME = "Ron Olson"; 110 | TargetAttributes = { 111 | 0FB008651949E50A0014F78F = { 112 | CreatedOnToolsVersion = 6.0; 113 | }; 114 | }; 115 | }; 116 | buildConfigurationList = 0FB008611949E50A0014F78F /* Build configuration list for PBXProject "HelloSwiftAndCPP" */; 117 | compatibilityVersion = "Xcode 3.2"; 118 | developmentRegion = en; 119 | hasScannedForEncodings = 0; 120 | knownRegions = ( 121 | en, 122 | Base, 123 | ); 124 | mainGroup = 0FB0085D1949E50A0014F78F; 125 | productRefGroup = 0FB008671949E50A0014F78F /* Products */; 126 | projectDirPath = ""; 127 | projectRoot = ""; 128 | targets = ( 129 | 0FB008651949E50A0014F78F /* HelloSwiftAndCPP */, 130 | ); 131 | }; 132 | /* End PBXProject section */ 133 | 134 | /* Begin PBXSourcesBuildPhase section */ 135 | 0FB008621949E50A0014F78F /* Sources */ = { 136 | isa = PBXSourcesBuildPhase; 137 | buildActionMask = 2147483647; 138 | files = ( 139 | 0FB0087B194A23AF0014F78F /* ABCpp.mm in Sources */, 140 | 0FB00878194A22390014F78F /* XYZSomething.m in Sources */, 141 | 0FB00875194A1BE40014F78F /* SomeCPPClass.cpp in Sources */, 142 | 0FB0086A1949E50A0014F78F /* main.swift in Sources */, 143 | ); 144 | runOnlyForDeploymentPostprocessing = 0; 145 | }; 146 | /* End PBXSourcesBuildPhase section */ 147 | 148 | /* Begin XCBuildConfiguration section */ 149 | 0FB0086B1949E50A0014F78F /* Debug */ = { 150 | isa = XCBuildConfiguration; 151 | buildSettings = { 152 | ALWAYS_SEARCH_USER_PATHS = NO; 153 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 154 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 155 | CLANG_CXX_LIBRARY = "libc++"; 156 | CLANG_ENABLE_MODULES = YES; 157 | CLANG_ENABLE_OBJC_ARC = YES; 158 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 159 | CLANG_WARN_BOOL_CONVERSION = YES; 160 | CLANG_WARN_COMMA = YES; 161 | CLANG_WARN_CONSTANT_CONVERSION = YES; 162 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 163 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 164 | CLANG_WARN_EMPTY_BODY = YES; 165 | CLANG_WARN_ENUM_CONVERSION = YES; 166 | CLANG_WARN_INFINITE_RECURSION = YES; 167 | CLANG_WARN_INT_CONVERSION = YES; 168 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 169 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 170 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 171 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 172 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 173 | CLANG_WARN_STRICT_PROTOTYPES = YES; 174 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 175 | CLANG_WARN_UNREACHABLE_CODE = YES; 176 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 177 | COPY_PHASE_STRIP = NO; 178 | ENABLE_STRICT_OBJC_MSGSEND = YES; 179 | ENABLE_TESTABILITY = YES; 180 | GCC_C_LANGUAGE_STANDARD = gnu99; 181 | GCC_DYNAMIC_NO_PIC = NO; 182 | GCC_NO_COMMON_BLOCKS = YES; 183 | GCC_OPTIMIZATION_LEVEL = 0; 184 | GCC_PREPROCESSOR_DEFINITIONS = ( 185 | "DEBUG=1", 186 | "$(inherited)", 187 | ); 188 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 189 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 190 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 191 | GCC_WARN_UNDECLARED_SELECTOR = YES; 192 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 193 | GCC_WARN_UNUSED_FUNCTION = YES; 194 | GCC_WARN_UNUSED_VARIABLE = YES; 195 | MACOSX_DEPLOYMENT_TARGET = 10.9; 196 | METAL_ENABLE_DEBUG_INFO = YES; 197 | ONLY_ACTIVE_ARCH = YES; 198 | SDKROOT = macosx; 199 | SWIFT_OBJC_BRIDGING_HEADER = ""; 200 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 201 | }; 202 | name = Debug; 203 | }; 204 | 0FB0086C1949E50A0014F78F /* Release */ = { 205 | isa = XCBuildConfiguration; 206 | buildSettings = { 207 | ALWAYS_SEARCH_USER_PATHS = NO; 208 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 209 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 210 | CLANG_CXX_LIBRARY = "libc++"; 211 | CLANG_ENABLE_MODULES = YES; 212 | CLANG_ENABLE_OBJC_ARC = YES; 213 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 214 | CLANG_WARN_BOOL_CONVERSION = YES; 215 | CLANG_WARN_COMMA = YES; 216 | CLANG_WARN_CONSTANT_CONVERSION = YES; 217 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 218 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 219 | CLANG_WARN_EMPTY_BODY = YES; 220 | CLANG_WARN_ENUM_CONVERSION = YES; 221 | CLANG_WARN_INFINITE_RECURSION = YES; 222 | CLANG_WARN_INT_CONVERSION = YES; 223 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 224 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 225 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 226 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 227 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 228 | CLANG_WARN_STRICT_PROTOTYPES = YES; 229 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 230 | CLANG_WARN_UNREACHABLE_CODE = YES; 231 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 232 | COPY_PHASE_STRIP = YES; 233 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 234 | ENABLE_NS_ASSERTIONS = NO; 235 | ENABLE_STRICT_OBJC_MSGSEND = YES; 236 | GCC_C_LANGUAGE_STANDARD = gnu99; 237 | GCC_NO_COMMON_BLOCKS = YES; 238 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 239 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 240 | GCC_WARN_UNDECLARED_SELECTOR = YES; 241 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 242 | GCC_WARN_UNUSED_FUNCTION = YES; 243 | GCC_WARN_UNUSED_VARIABLE = YES; 244 | MACOSX_DEPLOYMENT_TARGET = 10.9; 245 | METAL_ENABLE_DEBUG_INFO = NO; 246 | SDKROOT = macosx; 247 | SWIFT_COMPILATION_MODE = wholemodule; 248 | SWIFT_OBJC_BRIDGING_HEADER = ""; 249 | }; 250 | name = Release; 251 | }; 252 | 0FB0086E1949E50A0014F78F /* Debug */ = { 253 | isa = XCBuildConfiguration; 254 | buildSettings = { 255 | CLANG_ENABLE_MODULES = YES; 256 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 257 | PRODUCT_NAME = "$(TARGET_NAME)"; 258 | SDKROOT = macosx; 259 | SWIFT_OBJC_BRIDGING_HEADER = "HelloSwiftAndCPP/HelloSwiftAndCPP-Bridging-Header.h"; 260 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 261 | SWIFT_VERSION = 5.0; 262 | }; 263 | name = Debug; 264 | }; 265 | 0FB0086F1949E50A0014F78F /* Release */ = { 266 | isa = XCBuildConfiguration; 267 | buildSettings = { 268 | CLANG_ENABLE_MODULES = YES; 269 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | SDKROOT = macosx; 272 | SWIFT_OBJC_BRIDGING_HEADER = "HelloSwiftAndCPP/HelloSwiftAndCPP-Bridging-Header.h"; 273 | SWIFT_VERSION = 5.0; 274 | }; 275 | name = Release; 276 | }; 277 | /* End XCBuildConfiguration section */ 278 | 279 | /* Begin XCConfigurationList section */ 280 | 0FB008611949E50A0014F78F /* Build configuration list for PBXProject "HelloSwiftAndCPP" */ = { 281 | isa = XCConfigurationList; 282 | buildConfigurations = ( 283 | 0FB0086B1949E50A0014F78F /* Debug */, 284 | 0FB0086C1949E50A0014F78F /* Release */, 285 | ); 286 | defaultConfigurationIsVisible = 0; 287 | defaultConfigurationName = Release; 288 | }; 289 | 0FB0086D1949E50A0014F78F /* Build configuration list for PBXNativeTarget "HelloSwiftAndCPP" */ = { 290 | isa = XCConfigurationList; 291 | buildConfigurations = ( 292 | 0FB0086E1949E50A0014F78F /* Debug */, 293 | 0FB0086F1949E50A0014F78F /* Release */, 294 | ); 295 | defaultConfigurationIsVisible = 0; 296 | defaultConfigurationName = Release; 297 | }; 298 | /* End XCConfigurationList section */ 299 | }; 300 | rootObject = 0FB0085E1949E50A0014F78F /* Project object */; 301 | } 302 | --------------------------------------------------------------------------------