├── .gitignore ├── CITATION.cff ├── Demo Swift Excel Xlsx Reader Writer ├── Bridge.h ├── Demo Swift Excel Xlsx Reader Writer.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── Demo Swift Excel Xlsx Reader Writer │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── Demo Swift Excel Xlsx Reader WriterTests │ ├── Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift │ └── Info.plist ├── Demo Swift Excel Xlsx Reader WriterUITests │ ├── Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift │ └── Info.plist └── demo.xlsx ├── README.md ├── README.png ├── demo.xlsx ├── doc └── setup │ ├── add_carthage_frameworks.md │ ├── carthage_troubleshooting.md │ └── create_a_new_xcode_project.md └── src └── Bridge.h /.gitignore: -------------------------------------------------------------------------------- 1 | ## 2 | # This .gitignore file is our general purpose file. 3 | # This file is for macOS, Xcode, Swift, Carthage, Cocoapods, etc. 4 | ## 5 | 6 | ## Builds 7 | #.build/ 8 | #.Build/ 9 | #build/ 10 | #Build/ 11 | #DerivedData/ 12 | 13 | ## Settings 14 | *.pbxuser 15 | !default.pbxuser 16 | *.mode1v3 17 | !default.mode1v3 18 | *.mode2v3 19 | !default.mode2v3 20 | *.perspectivev3 21 | !default.perspectivev3 22 | xcuserdata/ 23 | 24 | ## Other 25 | .DS_Store 26 | *.moved-aside 27 | *.xccheckout 28 | *.xcscmblueprint 29 | 30 | ## Obj-C/Swift specific 31 | *.hmap 32 | *.ipa 33 | *.dSYM.zip 34 | *.dSYM 35 | 36 | ## Playgrounds 37 | timeline.xctimeline 38 | playground.xcworkspace 39 | 40 | ## Swift Package Manager 41 | Packages/ 42 | Package.pins 43 | Package.resolved 44 | 45 | ## CocoaPods 46 | Pods/ 47 | 48 | ## Carthage 49 | #*/Carthage/Checkouts 50 | #*/Carthage/Build 51 | 52 | ## Fastlane 53 | fastlane/report.xml 54 | fastlane/Preview.html 55 | fastlane/screenshots 56 | fastlane/test_output 57 | -------------------------------------------------------------------------------- /CITATION.cff: -------------------------------------------------------------------------------- 1 | cff-version: 1.2.0 2 | title: Demo Swift Excel Xlsx Reader Writer 3 | message: >- 4 | If you use this work and you want to cite it, 5 | then you can use the metadata from this file. 6 | type: software 7 | authors: 8 | - given-names: Joel Parker 9 | family-names: Henderson 10 | email: joel@joelparkerhenderson.com 11 | affiliation: joelparkerhenderson.com 12 | orcid: 'https://orcid.org/0009-0000-4681-282X' 13 | identifiers: 14 | - type: url 15 | value: 'https://github.com/joelparkerhenderson/demo-swift-excel-xlsx-reader-writer/' 16 | description: Demo Swift Excel Xlsx Reader Writer 17 | repository-code: 'https://github.com/joelparkerhenderson/demo-swift-excel-xlsx-reader-writer/' 18 | abstract: >- 19 | Demo Swift Excel Xlsx Reader Writer 20 | license: See license file 21 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Bridge.h: -------------------------------------------------------------------------------- 1 | #ifndef Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h 2 | #define Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h 3 | #import "XlsxReaderWriter-swift-bridge.h" 4 | #endif /* Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h */ 5 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader Writer.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5D4DFB561F791E0C009EED30 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D4DFB551F791E0C009EED30 /* AppDelegate.swift */; }; 11 | 5D4DFB581F791E0C009EED30 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D4DFB571F791E0C009EED30 /* ViewController.swift */; }; 12 | 5D4DFB5B1F791E0C009EED30 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D4DFB591F791E0C009EED30 /* Main.storyboard */; }; 13 | 5D4DFB5D1F791E0C009EED30 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5D4DFB5C1F791E0C009EED30 /* Assets.xcassets */; }; 14 | 5D4DFB601F791E0C009EED30 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D4DFB5E1F791E0C009EED30 /* LaunchScreen.storyboard */; }; 15 | 5D4DFB6B1F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D4DFB6A1F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift */; }; 16 | 5D4DFB761F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D4DFB751F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift */; }; 17 | 5D4DFB921F791E43009EED30 /* libXlsxReaderWriter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D4DFB8B1F791E2F009EED30 /* libXlsxReaderWriter.a */; }; 18 | 5D4DFB951F791E49009EED30 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D4DFB941F791E49009EED30 /* libz.tbd */; }; 19 | 5D4DFB991F7923FA009EED30 /* demo.xlsx in Resources */ = {isa = PBXBuildFile; fileRef = 5D4DFB981F7923FA009EED30 /* demo.xlsx */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | 5D4DFB671F791E0C009EED30 /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = 5D4DFB4A1F791E0C009EED30 /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = 5D4DFB511F791E0C009EED30; 28 | remoteInfo = "Demo Swift Excel Xlsx Reader Writer"; 29 | }; 30 | 5D4DFB721F791E0C009EED30 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = 5D4DFB4A1F791E0C009EED30 /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 5D4DFB511F791E0C009EED30; 35 | remoteInfo = "Demo Swift Excel Xlsx Reader Writer"; 36 | }; 37 | 5D4DFB8A1F791E2F009EED30 /* PBXContainerItemProxy */ = { 38 | isa = PBXContainerItemProxy; 39 | containerPortal = 5D4DFB831F791E2E009EED30 /* XlsxReaderWriter.xcodeproj */; 40 | proxyType = 2; 41 | remoteGlobalIDString = 45B6E23A1A148F7500288A78; 42 | remoteInfo = XlsxReaderWriter; 43 | }; 44 | 5D4DFB8C1F791E2F009EED30 /* PBXContainerItemProxy */ = { 45 | isa = PBXContainerItemProxy; 46 | containerPortal = 5D4DFB831F791E2E009EED30 /* XlsxReaderWriter.xcodeproj */; 47 | proxyType = 2; 48 | remoteGlobalIDString = 45B6E2451A148F7500288A78; 49 | remoteInfo = XlsxReaderWriterTests; 50 | }; 51 | 5D4DFB8E1F791E2F009EED30 /* PBXContainerItemProxy */ = { 52 | isa = PBXContainerItemProxy; 53 | containerPortal = 5D4DFB831F791E2E009EED30 /* XlsxReaderWriter.xcodeproj */; 54 | proxyType = 2; 55 | remoteGlobalIDString = 22156D581C46B42500BB5779; 56 | remoteInfo = "XlsxReaderWriter Mac"; 57 | }; 58 | 5D4DFB901F791E3D009EED30 /* PBXContainerItemProxy */ = { 59 | isa = PBXContainerItemProxy; 60 | containerPortal = 5D4DFB831F791E2E009EED30 /* XlsxReaderWriter.xcodeproj */; 61 | proxyType = 1; 62 | remoteGlobalIDString = 45B6E2391A148F7500288A78; 63 | remoteInfo = XlsxReaderWriter; 64 | }; 65 | /* End PBXContainerItemProxy section */ 66 | 67 | /* Begin PBXFileReference section */ 68 | 5D4DFB521F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Demo Swift Excel Xlsx Reader Writer.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 69 | 5D4DFB551F791E0C009EED30 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 70 | 5D4DFB571F791E0C009EED30 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 71 | 5D4DFB5A1F791E0C009EED30 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 72 | 5D4DFB5C1F791E0C009EED30 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 73 | 5D4DFB5F1F791E0C009EED30 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 74 | 5D4DFB611F791E0C009EED30 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 75 | 5D4DFB661F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Demo Swift Excel Xlsx Reader WriterTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 76 | 5D4DFB6A1F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift; sourceTree = ""; }; 77 | 5D4DFB6C1F791E0C009EED30 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 78 | 5D4DFB711F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Demo Swift Excel Xlsx Reader WriterUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 79 | 5D4DFB751F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift; sourceTree = ""; }; 80 | 5D4DFB771F791E0C009EED30 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 81 | 5D4DFB831F791E2E009EED30 /* XlsxReaderWriter.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = XlsxReaderWriter.xcodeproj; path = XlsxReaderWriter/XlsxReaderWriter.xcodeproj; sourceTree = SOURCE_ROOT; }; 82 | 5D4DFB941F791E49009EED30 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 83 | 5D4DFB971F791FFD009EED30 /* Bridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Bridge.h; sourceTree = ""; }; 84 | 5D4DFB981F7923FA009EED30 /* demo.xlsx */ = {isa = PBXFileReference; lastKnownFileType = file; path = demo.xlsx; sourceTree = ""; }; 85 | /* End PBXFileReference section */ 86 | 87 | /* Begin PBXFrameworksBuildPhase section */ 88 | 5D4DFB4F1F791E0C009EED30 /* Frameworks */ = { 89 | isa = PBXFrameworksBuildPhase; 90 | buildActionMask = 2147483647; 91 | files = ( 92 | 5D4DFB951F791E49009EED30 /* libz.tbd in Frameworks */, 93 | 5D4DFB921F791E43009EED30 /* libXlsxReaderWriter.a in Frameworks */, 94 | ); 95 | runOnlyForDeploymentPostprocessing = 0; 96 | }; 97 | 5D4DFB631F791E0C009EED30 /* Frameworks */ = { 98 | isa = PBXFrameworksBuildPhase; 99 | buildActionMask = 2147483647; 100 | files = ( 101 | ); 102 | runOnlyForDeploymentPostprocessing = 0; 103 | }; 104 | 5D4DFB6E1F791E0C009EED30 /* Frameworks */ = { 105 | isa = PBXFrameworksBuildPhase; 106 | buildActionMask = 2147483647; 107 | files = ( 108 | ); 109 | runOnlyForDeploymentPostprocessing = 0; 110 | }; 111 | /* End PBXFrameworksBuildPhase section */ 112 | 113 | /* Begin PBXGroup section */ 114 | 5D4DFB491F791E0C009EED30 = { 115 | isa = PBXGroup; 116 | children = ( 117 | 5D4DFB981F7923FA009EED30 /* demo.xlsx */, 118 | 5D4DFB971F791FFD009EED30 /* Bridge.h */, 119 | 5D4DFB541F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer */, 120 | 5D4DFB691F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterTests */, 121 | 5D4DFB741F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterUITests */, 122 | 5D4DFB531F791E0C009EED30 /* Products */, 123 | 5D4DFB931F791E49009EED30 /* Frameworks */, 124 | ); 125 | sourceTree = ""; 126 | }; 127 | 5D4DFB531F791E0C009EED30 /* Products */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 5D4DFB521F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer.app */, 131 | 5D4DFB661F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterTests.xctest */, 132 | 5D4DFB711F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterUITests.xctest */, 133 | ); 134 | name = Products; 135 | sourceTree = ""; 136 | }; 137 | 5D4DFB541F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 5D4DFB831F791E2E009EED30 /* XlsxReaderWriter.xcodeproj */, 141 | 5D4DFB551F791E0C009EED30 /* AppDelegate.swift */, 142 | 5D4DFB571F791E0C009EED30 /* ViewController.swift */, 143 | 5D4DFB591F791E0C009EED30 /* Main.storyboard */, 144 | 5D4DFB5C1F791E0C009EED30 /* Assets.xcassets */, 145 | 5D4DFB5E1F791E0C009EED30 /* LaunchScreen.storyboard */, 146 | 5D4DFB611F791E0C009EED30 /* Info.plist */, 147 | ); 148 | path = "Demo Swift Excel Xlsx Reader Writer"; 149 | sourceTree = ""; 150 | }; 151 | 5D4DFB691F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterTests */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | 5D4DFB6A1F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift */, 155 | 5D4DFB6C1F791E0C009EED30 /* Info.plist */, 156 | ); 157 | path = "Demo Swift Excel Xlsx Reader WriterTests"; 158 | sourceTree = ""; 159 | }; 160 | 5D4DFB741F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterUITests */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | 5D4DFB751F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift */, 164 | 5D4DFB771F791E0C009EED30 /* Info.plist */, 165 | ); 166 | path = "Demo Swift Excel Xlsx Reader WriterUITests"; 167 | sourceTree = ""; 168 | }; 169 | 5D4DFB841F791E2E009EED30 /* Products */ = { 170 | isa = PBXGroup; 171 | children = ( 172 | 5D4DFB8B1F791E2F009EED30 /* libXlsxReaderWriter.a */, 173 | 5D4DFB8D1F791E2F009EED30 /* XlsxReaderWriterTests.xctest */, 174 | 5D4DFB8F1F791E2F009EED30 /* XlsxReaderWriter.framework */, 175 | ); 176 | name = Products; 177 | sourceTree = ""; 178 | }; 179 | 5D4DFB931F791E49009EED30 /* Frameworks */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | 5D4DFB941F791E49009EED30 /* libz.tbd */, 183 | ); 184 | name = Frameworks; 185 | sourceTree = ""; 186 | }; 187 | /* End PBXGroup section */ 188 | 189 | /* Begin PBXNativeTarget section */ 190 | 5D4DFB511F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer */ = { 191 | isa = PBXNativeTarget; 192 | buildConfigurationList = 5D4DFB7A1F791E0C009EED30 /* Build configuration list for PBXNativeTarget "Demo Swift Excel Xlsx Reader Writer" */; 193 | buildPhases = ( 194 | 5D4DFB4E1F791E0C009EED30 /* Sources */, 195 | 5D4DFB4F1F791E0C009EED30 /* Frameworks */, 196 | 5D4DFB501F791E0C009EED30 /* Resources */, 197 | ); 198 | buildRules = ( 199 | ); 200 | dependencies = ( 201 | 5D4DFB911F791E3D009EED30 /* PBXTargetDependency */, 202 | ); 203 | name = "Demo Swift Excel Xlsx Reader Writer"; 204 | productName = "Demo Swift Excel Xlsx Reader Writer"; 205 | productReference = 5D4DFB521F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer.app */; 206 | productType = "com.apple.product-type.application"; 207 | }; 208 | 5D4DFB651F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterTests */ = { 209 | isa = PBXNativeTarget; 210 | buildConfigurationList = 5D4DFB7D1F791E0C009EED30 /* Build configuration list for PBXNativeTarget "Demo Swift Excel Xlsx Reader WriterTests" */; 211 | buildPhases = ( 212 | 5D4DFB621F791E0C009EED30 /* Sources */, 213 | 5D4DFB631F791E0C009EED30 /* Frameworks */, 214 | 5D4DFB641F791E0C009EED30 /* Resources */, 215 | ); 216 | buildRules = ( 217 | ); 218 | dependencies = ( 219 | 5D4DFB681F791E0C009EED30 /* PBXTargetDependency */, 220 | ); 221 | name = "Demo Swift Excel Xlsx Reader WriterTests"; 222 | productName = "Demo Swift Excel Xlsx Reader WriterTests"; 223 | productReference = 5D4DFB661F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterTests.xctest */; 224 | productType = "com.apple.product-type.bundle.unit-test"; 225 | }; 226 | 5D4DFB701F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterUITests */ = { 227 | isa = PBXNativeTarget; 228 | buildConfigurationList = 5D4DFB801F791E0C009EED30 /* Build configuration list for PBXNativeTarget "Demo Swift Excel Xlsx Reader WriterUITests" */; 229 | buildPhases = ( 230 | 5D4DFB6D1F791E0C009EED30 /* Sources */, 231 | 5D4DFB6E1F791E0C009EED30 /* Frameworks */, 232 | 5D4DFB6F1F791E0C009EED30 /* Resources */, 233 | ); 234 | buildRules = ( 235 | ); 236 | dependencies = ( 237 | 5D4DFB731F791E0C009EED30 /* PBXTargetDependency */, 238 | ); 239 | name = "Demo Swift Excel Xlsx Reader WriterUITests"; 240 | productName = "Demo Swift Excel Xlsx Reader WriterUITests"; 241 | productReference = 5D4DFB711F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterUITests.xctest */; 242 | productType = "com.apple.product-type.bundle.ui-testing"; 243 | }; 244 | /* End PBXNativeTarget section */ 245 | 246 | /* Begin PBXProject section */ 247 | 5D4DFB4A1F791E0C009EED30 /* Project object */ = { 248 | isa = PBXProject; 249 | attributes = { 250 | LastSwiftUpdateCheck = 0830; 251 | LastUpgradeCheck = 0830; 252 | ORGANIZATIONNAME = JoelParkerHenderson.com; 253 | TargetAttributes = { 254 | 5D4DFB511F791E0C009EED30 = { 255 | CreatedOnToolsVersion = 8.3.3; 256 | DevelopmentTeam = G863BF9CVX; 257 | ProvisioningStyle = Automatic; 258 | }; 259 | 5D4DFB651F791E0C009EED30 = { 260 | CreatedOnToolsVersion = 8.3.3; 261 | ProvisioningStyle = Automatic; 262 | TestTargetID = 5D4DFB511F791E0C009EED30; 263 | }; 264 | 5D4DFB701F791E0C009EED30 = { 265 | CreatedOnToolsVersion = 8.3.3; 266 | ProvisioningStyle = Automatic; 267 | TestTargetID = 5D4DFB511F791E0C009EED30; 268 | }; 269 | }; 270 | }; 271 | buildConfigurationList = 5D4DFB4D1F791E0C009EED30 /* Build configuration list for PBXProject "Demo Swift Excel Xlsx Reader Writer" */; 272 | compatibilityVersion = "Xcode 3.2"; 273 | developmentRegion = English; 274 | hasScannedForEncodings = 0; 275 | knownRegions = ( 276 | en, 277 | Base, 278 | ); 279 | mainGroup = 5D4DFB491F791E0C009EED30; 280 | productRefGroup = 5D4DFB531F791E0C009EED30 /* Products */; 281 | projectDirPath = ""; 282 | projectReferences = ( 283 | { 284 | ProductGroup = 5D4DFB841F791E2E009EED30 /* Products */; 285 | ProjectRef = 5D4DFB831F791E2E009EED30 /* XlsxReaderWriter.xcodeproj */; 286 | }, 287 | ); 288 | projectRoot = ""; 289 | targets = ( 290 | 5D4DFB511F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer */, 291 | 5D4DFB651F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterTests */, 292 | 5D4DFB701F791E0C009EED30 /* Demo Swift Excel Xlsx Reader WriterUITests */, 293 | ); 294 | }; 295 | /* End PBXProject section */ 296 | 297 | /* Begin PBXReferenceProxy section */ 298 | 5D4DFB8B1F791E2F009EED30 /* libXlsxReaderWriter.a */ = { 299 | isa = PBXReferenceProxy; 300 | fileType = archive.ar; 301 | path = libXlsxReaderWriter.a; 302 | remoteRef = 5D4DFB8A1F791E2F009EED30 /* PBXContainerItemProxy */; 303 | sourceTree = BUILT_PRODUCTS_DIR; 304 | }; 305 | 5D4DFB8D1F791E2F009EED30 /* XlsxReaderWriterTests.xctest */ = { 306 | isa = PBXReferenceProxy; 307 | fileType = wrapper.cfbundle; 308 | path = XlsxReaderWriterTests.xctest; 309 | remoteRef = 5D4DFB8C1F791E2F009EED30 /* PBXContainerItemProxy */; 310 | sourceTree = BUILT_PRODUCTS_DIR; 311 | }; 312 | 5D4DFB8F1F791E2F009EED30 /* XlsxReaderWriter.framework */ = { 313 | isa = PBXReferenceProxy; 314 | fileType = wrapper.framework; 315 | path = XlsxReaderWriter.framework; 316 | remoteRef = 5D4DFB8E1F791E2F009EED30 /* PBXContainerItemProxy */; 317 | sourceTree = BUILT_PRODUCTS_DIR; 318 | }; 319 | /* End PBXReferenceProxy section */ 320 | 321 | /* Begin PBXResourcesBuildPhase section */ 322 | 5D4DFB501F791E0C009EED30 /* Resources */ = { 323 | isa = PBXResourcesBuildPhase; 324 | buildActionMask = 2147483647; 325 | files = ( 326 | 5D4DFB601F791E0C009EED30 /* LaunchScreen.storyboard in Resources */, 327 | 5D4DFB5D1F791E0C009EED30 /* Assets.xcassets in Resources */, 328 | 5D4DFB5B1F791E0C009EED30 /* Main.storyboard in Resources */, 329 | 5D4DFB991F7923FA009EED30 /* demo.xlsx in Resources */, 330 | ); 331 | runOnlyForDeploymentPostprocessing = 0; 332 | }; 333 | 5D4DFB641F791E0C009EED30 /* Resources */ = { 334 | isa = PBXResourcesBuildPhase; 335 | buildActionMask = 2147483647; 336 | files = ( 337 | ); 338 | runOnlyForDeploymentPostprocessing = 0; 339 | }; 340 | 5D4DFB6F1F791E0C009EED30 /* Resources */ = { 341 | isa = PBXResourcesBuildPhase; 342 | buildActionMask = 2147483647; 343 | files = ( 344 | ); 345 | runOnlyForDeploymentPostprocessing = 0; 346 | }; 347 | /* End PBXResourcesBuildPhase section */ 348 | 349 | /* Begin PBXSourcesBuildPhase section */ 350 | 5D4DFB4E1F791E0C009EED30 /* Sources */ = { 351 | isa = PBXSourcesBuildPhase; 352 | buildActionMask = 2147483647; 353 | files = ( 354 | 5D4DFB581F791E0C009EED30 /* ViewController.swift in Sources */, 355 | 5D4DFB561F791E0C009EED30 /* AppDelegate.swift in Sources */, 356 | ); 357 | runOnlyForDeploymentPostprocessing = 0; 358 | }; 359 | 5D4DFB621F791E0C009EED30 /* Sources */ = { 360 | isa = PBXSourcesBuildPhase; 361 | buildActionMask = 2147483647; 362 | files = ( 363 | 5D4DFB6B1F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift in Sources */, 364 | ); 365 | runOnlyForDeploymentPostprocessing = 0; 366 | }; 367 | 5D4DFB6D1F791E0C009EED30 /* Sources */ = { 368 | isa = PBXSourcesBuildPhase; 369 | buildActionMask = 2147483647; 370 | files = ( 371 | 5D4DFB761F791E0C009EED30 /* Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift in Sources */, 372 | ); 373 | runOnlyForDeploymentPostprocessing = 0; 374 | }; 375 | /* End PBXSourcesBuildPhase section */ 376 | 377 | /* Begin PBXTargetDependency section */ 378 | 5D4DFB681F791E0C009EED30 /* PBXTargetDependency */ = { 379 | isa = PBXTargetDependency; 380 | target = 5D4DFB511F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer */; 381 | targetProxy = 5D4DFB671F791E0C009EED30 /* PBXContainerItemProxy */; 382 | }; 383 | 5D4DFB731F791E0C009EED30 /* PBXTargetDependency */ = { 384 | isa = PBXTargetDependency; 385 | target = 5D4DFB511F791E0C009EED30 /* Demo Swift Excel Xlsx Reader Writer */; 386 | targetProxy = 5D4DFB721F791E0C009EED30 /* PBXContainerItemProxy */; 387 | }; 388 | 5D4DFB911F791E3D009EED30 /* PBXTargetDependency */ = { 389 | isa = PBXTargetDependency; 390 | name = XlsxReaderWriter; 391 | targetProxy = 5D4DFB901F791E3D009EED30 /* PBXContainerItemProxy */; 392 | }; 393 | /* End PBXTargetDependency section */ 394 | 395 | /* Begin PBXVariantGroup section */ 396 | 5D4DFB591F791E0C009EED30 /* Main.storyboard */ = { 397 | isa = PBXVariantGroup; 398 | children = ( 399 | 5D4DFB5A1F791E0C009EED30 /* Base */, 400 | ); 401 | name = Main.storyboard; 402 | sourceTree = ""; 403 | }; 404 | 5D4DFB5E1F791E0C009EED30 /* LaunchScreen.storyboard */ = { 405 | isa = PBXVariantGroup; 406 | children = ( 407 | 5D4DFB5F1F791E0C009EED30 /* Base */, 408 | ); 409 | name = LaunchScreen.storyboard; 410 | sourceTree = ""; 411 | }; 412 | /* End PBXVariantGroup section */ 413 | 414 | /* Begin XCBuildConfiguration section */ 415 | 5D4DFB781F791E0C009EED30 /* Debug */ = { 416 | isa = XCBuildConfiguration; 417 | buildSettings = { 418 | ALWAYS_SEARCH_USER_PATHS = NO; 419 | CLANG_ANALYZER_NONNULL = YES; 420 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 421 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 422 | CLANG_CXX_LIBRARY = "libc++"; 423 | CLANG_ENABLE_MODULES = YES; 424 | CLANG_ENABLE_OBJC_ARC = YES; 425 | CLANG_WARN_BOOL_CONVERSION = YES; 426 | CLANG_WARN_CONSTANT_CONVERSION = YES; 427 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 428 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 429 | CLANG_WARN_EMPTY_BODY = YES; 430 | CLANG_WARN_ENUM_CONVERSION = YES; 431 | CLANG_WARN_INFINITE_RECURSION = YES; 432 | CLANG_WARN_INT_CONVERSION = YES; 433 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 434 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 435 | CLANG_WARN_UNREACHABLE_CODE = YES; 436 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 437 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 438 | COPY_PHASE_STRIP = NO; 439 | DEBUG_INFORMATION_FORMAT = dwarf; 440 | ENABLE_STRICT_OBJC_MSGSEND = YES; 441 | ENABLE_TESTABILITY = YES; 442 | GCC_C_LANGUAGE_STANDARD = gnu99; 443 | GCC_DYNAMIC_NO_PIC = NO; 444 | GCC_NO_COMMON_BLOCKS = YES; 445 | GCC_OPTIMIZATION_LEVEL = 0; 446 | GCC_PREPROCESSOR_DEFINITIONS = ( 447 | "DEBUG=1", 448 | "$(inherited)", 449 | ); 450 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 451 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 452 | GCC_WARN_UNDECLARED_SELECTOR = YES; 453 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 454 | GCC_WARN_UNUSED_FUNCTION = YES; 455 | GCC_WARN_UNUSED_VARIABLE = YES; 456 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 457 | MTL_ENABLE_DEBUG_INFO = YES; 458 | ONLY_ACTIVE_ARCH = YES; 459 | SDKROOT = iphoneos; 460 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 461 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 462 | TARGETED_DEVICE_FAMILY = "1,2"; 463 | }; 464 | name = Debug; 465 | }; 466 | 5D4DFB791F791E0C009EED30 /* Release */ = { 467 | isa = XCBuildConfiguration; 468 | buildSettings = { 469 | ALWAYS_SEARCH_USER_PATHS = NO; 470 | CLANG_ANALYZER_NONNULL = YES; 471 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 472 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 473 | CLANG_CXX_LIBRARY = "libc++"; 474 | CLANG_ENABLE_MODULES = YES; 475 | CLANG_ENABLE_OBJC_ARC = YES; 476 | CLANG_WARN_BOOL_CONVERSION = YES; 477 | CLANG_WARN_CONSTANT_CONVERSION = YES; 478 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 479 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 480 | CLANG_WARN_EMPTY_BODY = YES; 481 | CLANG_WARN_ENUM_CONVERSION = YES; 482 | CLANG_WARN_INFINITE_RECURSION = YES; 483 | CLANG_WARN_INT_CONVERSION = YES; 484 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 485 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 486 | CLANG_WARN_UNREACHABLE_CODE = YES; 487 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 488 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 489 | COPY_PHASE_STRIP = NO; 490 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 491 | ENABLE_NS_ASSERTIONS = NO; 492 | ENABLE_STRICT_OBJC_MSGSEND = YES; 493 | GCC_C_LANGUAGE_STANDARD = gnu99; 494 | GCC_NO_COMMON_BLOCKS = YES; 495 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 496 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 497 | GCC_WARN_UNDECLARED_SELECTOR = YES; 498 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 499 | GCC_WARN_UNUSED_FUNCTION = YES; 500 | GCC_WARN_UNUSED_VARIABLE = YES; 501 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 502 | MTL_ENABLE_DEBUG_INFO = NO; 503 | SDKROOT = iphoneos; 504 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 505 | TARGETED_DEVICE_FAMILY = "1,2"; 506 | VALIDATE_PRODUCT = YES; 507 | }; 508 | name = Release; 509 | }; 510 | 5D4DFB7B1F791E0C009EED30 /* Debug */ = { 511 | isa = XCBuildConfiguration; 512 | buildSettings = { 513 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 514 | DEVELOPMENT_TEAM = G863BF9CVX; 515 | INFOPLIST_FILE = "Demo Swift Excel Xlsx Reader Writer/Info.plist"; 516 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 517 | "OTHER_LDFLAGS[arch=*]" = "-all_load"; 518 | PRODUCT_BUNDLE_IDENTIFIER = "com.joelparkerhenderson.Demo-Swift-Excel-Xlsx-Reader-Writer"; 519 | PRODUCT_NAME = "$(TARGET_NAME)"; 520 | "SWIFT_OBJC_BRIDGING_HEADER[arch=*]" = Bridge.h; 521 | SWIFT_VERSION = 3.0; 522 | "USER_HEADER_SEARCH_PATHS[arch=*]" = "$(SRCROOT)/XlsxReaderWriter/**"; 523 | }; 524 | name = Debug; 525 | }; 526 | 5D4DFB7C1F791E0C009EED30 /* Release */ = { 527 | isa = XCBuildConfiguration; 528 | buildSettings = { 529 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 530 | DEVELOPMENT_TEAM = G863BF9CVX; 531 | INFOPLIST_FILE = "Demo Swift Excel Xlsx Reader Writer/Info.plist"; 532 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 533 | "OTHER_LDFLAGS[arch=*]" = "-all_load"; 534 | PRODUCT_BUNDLE_IDENTIFIER = "com.joelparkerhenderson.Demo-Swift-Excel-Xlsx-Reader-Writer"; 535 | PRODUCT_NAME = "$(TARGET_NAME)"; 536 | "SWIFT_OBJC_BRIDGING_HEADER[arch=*]" = Bridge.h; 537 | SWIFT_VERSION = 3.0; 538 | "USER_HEADER_SEARCH_PATHS[arch=*]" = "$(SRCROOT)/XlsxReaderWriter/**"; 539 | }; 540 | name = Release; 541 | }; 542 | 5D4DFB7E1F791E0C009EED30 /* Debug */ = { 543 | isa = XCBuildConfiguration; 544 | buildSettings = { 545 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 546 | BUNDLE_LOADER = "$(TEST_HOST)"; 547 | INFOPLIST_FILE = "Demo Swift Excel Xlsx Reader WriterTests/Info.plist"; 548 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 549 | PRODUCT_BUNDLE_IDENTIFIER = "com.joelparkerhenderson.Demo-Swift-Excel-Xlsx-Reader-WriterTests"; 550 | PRODUCT_NAME = "$(TARGET_NAME)"; 551 | SWIFT_VERSION = 3.0; 552 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo Swift Excel Xlsx Reader Writer.app/Demo Swift Excel Xlsx Reader Writer"; 553 | }; 554 | name = Debug; 555 | }; 556 | 5D4DFB7F1F791E0C009EED30 /* Release */ = { 557 | isa = XCBuildConfiguration; 558 | buildSettings = { 559 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 560 | BUNDLE_LOADER = "$(TEST_HOST)"; 561 | INFOPLIST_FILE = "Demo Swift Excel Xlsx Reader WriterTests/Info.plist"; 562 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 563 | PRODUCT_BUNDLE_IDENTIFIER = "com.joelparkerhenderson.Demo-Swift-Excel-Xlsx-Reader-WriterTests"; 564 | PRODUCT_NAME = "$(TARGET_NAME)"; 565 | SWIFT_VERSION = 3.0; 566 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo Swift Excel Xlsx Reader Writer.app/Demo Swift Excel Xlsx Reader Writer"; 567 | }; 568 | name = Release; 569 | }; 570 | 5D4DFB811F791E0C009EED30 /* Debug */ = { 571 | isa = XCBuildConfiguration; 572 | buildSettings = { 573 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 574 | INFOPLIST_FILE = "Demo Swift Excel Xlsx Reader WriterUITests/Info.plist"; 575 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 576 | PRODUCT_BUNDLE_IDENTIFIER = "com.joelparkerhenderson.Demo-Swift-Excel-Xlsx-Reader-WriterUITests"; 577 | PRODUCT_NAME = "$(TARGET_NAME)"; 578 | SWIFT_VERSION = 3.0; 579 | TEST_TARGET_NAME = "Demo Swift Excel Xlsx Reader Writer"; 580 | }; 581 | name = Debug; 582 | }; 583 | 5D4DFB821F791E0C009EED30 /* Release */ = { 584 | isa = XCBuildConfiguration; 585 | buildSettings = { 586 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 587 | INFOPLIST_FILE = "Demo Swift Excel Xlsx Reader WriterUITests/Info.plist"; 588 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 589 | PRODUCT_BUNDLE_IDENTIFIER = "com.joelparkerhenderson.Demo-Swift-Excel-Xlsx-Reader-WriterUITests"; 590 | PRODUCT_NAME = "$(TARGET_NAME)"; 591 | SWIFT_VERSION = 3.0; 592 | TEST_TARGET_NAME = "Demo Swift Excel Xlsx Reader Writer"; 593 | }; 594 | name = Release; 595 | }; 596 | /* End XCBuildConfiguration section */ 597 | 598 | /* Begin XCConfigurationList section */ 599 | 5D4DFB4D1F791E0C009EED30 /* Build configuration list for PBXProject "Demo Swift Excel Xlsx Reader Writer" */ = { 600 | isa = XCConfigurationList; 601 | buildConfigurations = ( 602 | 5D4DFB781F791E0C009EED30 /* Debug */, 603 | 5D4DFB791F791E0C009EED30 /* Release */, 604 | ); 605 | defaultConfigurationIsVisible = 0; 606 | defaultConfigurationName = Release; 607 | }; 608 | 5D4DFB7A1F791E0C009EED30 /* Build configuration list for PBXNativeTarget "Demo Swift Excel Xlsx Reader Writer" */ = { 609 | isa = XCConfigurationList; 610 | buildConfigurations = ( 611 | 5D4DFB7B1F791E0C009EED30 /* Debug */, 612 | 5D4DFB7C1F791E0C009EED30 /* Release */, 613 | ); 614 | defaultConfigurationIsVisible = 0; 615 | defaultConfigurationName = Release; 616 | }; 617 | 5D4DFB7D1F791E0C009EED30 /* Build configuration list for PBXNativeTarget "Demo Swift Excel Xlsx Reader WriterTests" */ = { 618 | isa = XCConfigurationList; 619 | buildConfigurations = ( 620 | 5D4DFB7E1F791E0C009EED30 /* Debug */, 621 | 5D4DFB7F1F791E0C009EED30 /* Release */, 622 | ); 623 | defaultConfigurationIsVisible = 0; 624 | defaultConfigurationName = Release; 625 | }; 626 | 5D4DFB801F791E0C009EED30 /* Build configuration list for PBXNativeTarget "Demo Swift Excel Xlsx Reader WriterUITests" */ = { 627 | isa = XCConfigurationList; 628 | buildConfigurations = ( 629 | 5D4DFB811F791E0C009EED30 /* Debug */, 630 | 5D4DFB821F791E0C009EED30 /* Release */, 631 | ); 632 | defaultConfigurationIsVisible = 0; 633 | defaultConfigurationName = Release; 634 | }; 635 | /* End XCConfigurationList section */ 636 | }; 637 | rootObject = 5D4DFB4A1F791E0C009EED30 /* Project object */; 638 | } 639 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader Writer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader Writer/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Demo Swift Excel Xlsx Reader Writer 4 | // 5 | // Created by Joel on 9/25/17. 6 | // Copyright © 2017 JoelParkerHenderson.com. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader Writer/Assets.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 | } -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader Writer/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader Writer/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader Writer/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader Writer/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Demo Swift Excel Xlsx Reader Writer 4 | // 5 | // Created by Joel on 9/25/17. 6 | // Copyright © 2017 JoelParkerHenderson.com. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Set the path to the path of wherever you put your Excel file. 17 | // The path in this demo code is the path to the demo.xlsx file. 18 | let path: String = Bundle.main.path(forResource: "demo", ofType: "xlsx")! 19 | 20 | // Open the spreadsheet, get the first sheet, first worksheet, and first cell A1. 21 | // This is solely demo code to show basics; your actual code would do much more here. 22 | let spreadsheet: BRAOfficeDocumentPackage = BRAOfficeDocumentPackage.open(path) 23 | let sheet: BRASheet = spreadsheet.workbook.sheets[0] as! BRASheet 24 | let worksheet: BRAWorksheet = spreadsheet.workbook.worksheets[0] as! BRAWorksheet 25 | let cell: BRACell = worksheet.cell(forCellReference: "A1") 26 | 27 | // Print some info to show the code works. 28 | print(sheet.name) // print "Sheet1" 29 | print(cell.stringValue()) // print "Alpha" 30 | 31 | } 32 | 33 | override func didReceiveMemoryWarning() { 34 | super.didReceiveMemoryWarning() 35 | // Dispose of any resources that can be recreated. 36 | } 37 | 38 | 39 | } 40 | 41 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader WriterTests/Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Demo_Swift_Excel_Xlsx_Reader_WriterTests.swift 3 | // Demo Swift Excel Xlsx Reader WriterTests 4 | // 5 | // Created by Joel on 9/25/17. 6 | // Copyright © 2017 JoelParkerHenderson.com. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import Demo_Swift_Excel_Xlsx_Reader_Writer 11 | 12 | class Demo_Swift_Excel_Xlsx_Reader_WriterTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader WriterTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader WriterUITests/Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Demo_Swift_Excel_Xlsx_Reader_WriterUITests.swift 3 | // Demo Swift Excel Xlsx Reader WriterUITests 4 | // 5 | // Created by Joel on 9/25/17. 6 | // Copyright © 2017 JoelParkerHenderson.com. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class Demo_Swift_Excel_Xlsx_Reader_WriterUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/Demo Swift Excel Xlsx Reader WriterUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Demo Swift Excel Xlsx Reader Writer/demo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joelparkerhenderson/demo-swift-excel-xlsx-reader-writer/5f683d13ef6ee6577812da27538996506158d3fa/Demo Swift Excel Xlsx Reader Writer/demo.xlsx -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Demo Swift Excel Xlsx Reader Writer 2 | 3 | Excel 4 | 5 | This demonstration shows: 6 | 7 | * The [Swift](http://swift.org) programming language with 8 | [Apple](http://apple.com) 9 | [Xcode](https://developer.apple.com/xcode/) 10 | [iOS](http://www.apple.com/ios/) 11 | 12 | * How to use [XlsxReaderWriter](https://github.com/renebigot/XlsxReaderWriter), 13 | which is an Objective-C library, to read [Microsoft Excel](https://en.wikipedia.org/wiki/Microsoft_Excel) 14 | files by using [Office OpenXML](https://en.wikipedia.org/wiki/Office_Open_XML). 15 | 16 | Example code to load a spreadsheet and print a cell value: 17 | 18 | ```swift 19 | let spreadsheet: BRAOfficeDocumentPackage = BRAOfficeDocumentPackage.open(path) 20 | let worksheet: BRAWorksheet = spreadsheet.workbook.worksheets[0] as! BRAWorksheet 21 | let cell: BRACell = worksheet.cellForCellReference("A1") 22 | print(cell.stringValue()) 23 | ``` 24 | 25 | 26 | ## Start 27 | 28 | To use this demo, you can clone this repo, or you can use this README to create your own project. 29 | 30 | If you clone this repo, then be aware that there are multiple git branches, so pick the one you want. 31 | 32 | * swift-4-xcode-9: Swift version 4, Xcode version 9, iOS version 11. 33 | 34 | * swift-3-xcode-8: Swift version 3, Xcode version 8, iOS version 10. 35 | 36 | 37 | ## Create the project 38 | 39 | Launch Xcode and create a new Xcode project. 40 | 41 | * Use iOS template "Single View Application" and Product Name "Demo Swift Excel Xlsx Reader Writer". 42 | 43 | * [Help](doc/setup/create_a_new_xcode_project.md) 44 | 45 | 46 | ## Get XlsxReaderWriter 47 | 48 | Get the repository, and put it in the the same folder as our demo project's xcodeproject: 49 | 50 | ```shell 51 | git clone --depth=1 https://github.com/renebigot/XlsxReaderWriter.git 52 | ``` 53 | 54 | If you want to confirm you put in the in the expected place, do the command `ls`: 55 | 56 | ```shell 57 | Demo Swift Excel Xlsx Reader Writer 58 | Demo Swift Excel Xlsx Reader Writer.xcodeproj 59 | Demo Swift Excel Xlsx Reader WriterTests 60 | Demo Swift Excel Xlsx Reader WriterUITests 61 | XlsxReaderWriter 62 | ``` 63 | 64 | 65 | ## Link 66 | 67 | Add the file `XlsxReaderWriter.xcodeproj` to the project, within the 68 | 69 | Add dependency: 70 | 71 | * Choose: Targets → Demo Swift Excel Xlsx Reader Writer 72 | * → Build Phases → Target Dependencies 73 | * Add: `XslxReaderWriter` → `XslxReaderWriter` 74 | 75 | Link binaries: 76 | 77 | * Choose: Targets → Demo Swift Excel XlsxReaderWriter 78 | * → Build Phases → Link Binaries With Libraries 79 | * Add: `libXlsxReaderWriter.a` (which is in the XlsxReaderWriter folder) 80 | * Add `libz.tbd` (which is in the standard list of Apple items). The `libz.tbd` is more current than the older version named `libz.dylib`. 81 | 82 | Linking: 83 | 84 | * Choose: Targets → Demo Swift Excel Xlsx Reader Writer 85 | * → Build Settings → All → Linking → Other Linker Flags 86 | * → Debug → (+) → Any Architecture | Any SDK 87 | * Add: `-all_load` 88 | * → Release → (+) → Any Architecture | Any SDK 89 | * Add: `-all_load` 90 | 91 | Search Paths: 92 | 93 | * Project → Demo → Build Settings → Search Paths → User Header Search Paths 94 | * → Debug → (+) → Any Architecture 95 | * Set it to: `$(SRCROOT)/XlsxReaderWriter/` not `$(SRCROOT)/XlsxReaderWriter/XlsxReaderWriter/`. 96 | * Select "recursive". 97 | * → Release) → (+) → Any Architecture 98 | * Set it to: `$(SRCROOT)/XlsxReaderWriter/` not `$(SRCROOT)/XlsxReaderWriter/XlsxReaderWriter/`. 99 | * Select "recursive". 100 | 101 | Bridging Header: 102 | 103 | * Create a new file to Xcode (File > New > File), then see the “Source” section, and click “Header File“. If an icon for "Header File" doesn't appear, then use the search box and type "Header". 104 | * We like the file name `Bridge.h` 105 | * Add this code: 106 | 107 | ```swift 108 | #ifndef Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h 109 | #define Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h 110 | #import "XlsxReaderWriter-swift-bridge.h" 111 | #endif /* Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h */ 112 | ``` 113 | 114 | Add the bridge: 115 | 116 | * Project → Demo → Build Settings → Swift Compiler - General → Objective-C Bridging Header 117 | * → (Debug & Release) → (+) → Any Architecture | Any SDK → Add: `Bridge.h` 118 | 119 | 120 | ## Run 121 | 122 | Run the project to verify it works so far. 123 | 124 | It should compile then launch the simulator. 125 | 126 | 127 | ## Troubleshooting 128 | 129 | Build error "'XlsxReaderWriter-swift-bridge.h' file not found": 130 | 131 | * Ensure that you've created the search paths as described above, and that they are both recursive. 132 | 133 | 134 | ## Load an Excel file 135 | 136 | This demo repository has an Excel file `demo.xlsx`. 137 | 138 | * You can use this file as is. The cell A1 has the word "Alpha". 139 | 140 | * Or you can create your own file by using your own Excel software, or any Excel-compatible software. 141 | 142 | Add the file to the project. 143 | 144 | 145 | ## Write the code 146 | 147 | Edit `ViewController.swift`: 148 | 149 | ```swift 150 | import UIKit 151 | 152 | class ViewController: UIViewController { 153 | 154 | override func viewDidLoad() { 155 | super.viewDidLoad() 156 | 157 | // Set the path to the path of wherever you put your Excel file. 158 | // The path in this demo code is the path to the demo.xlsx file. 159 | let path: String = Bundle.main.path(forResource: "demo", ofType: "xlsx")! 160 | 161 | 162 | // Open the spreadsheet, get the first sheet, first worksheet, and first cell A1. 163 | // This is solely demo code to show basics; your actual code would do much more here. 164 | let spreadsheet: BRAOfficeDocumentPackage = BRAOfficeDocumentPackage.open(path) 165 | let sheet: BRASheet = spreadsheet.workbook.sheets[0] as! BRASheet 166 | let worksheet: BRAWorksheet = spreadsheet.workbook.worksheets[0] as! BRAWorksheet 167 | let cell: BRACell = worksheet.cell(forCellReference: "A1") 168 | 169 | // Print some info to show the code works. 170 | print(sheet.name) // print "Sheet1" 171 | print(cell.stringValue()) // print "Alpha" 172 | } 173 | 174 | override func didReceiveMemoryWarning() { 175 | super.didReceiveMemoryWarning() 176 | } 177 | 178 | } 179 | ``` 180 | 181 | ## Run 182 | 183 | Run the project. 184 | 185 | * It should compile and launch a blank simulator. 186 | 187 | * The Xcode console should now show the text "Sheet1" and "Alpha". 188 | 189 | Congratulations, you're successful! 190 | 191 | 192 | ## Troubleshooting 193 | 194 | If this line fails at runtime: 195 | 196 | ```swift 197 | let path: String = Bundle.main.path(forResource: "demo", ofType: "xlsx")! 198 | ``` 199 | 200 | Then the app is unable to find the file `demo.xlsx`. 201 | 202 | Verify that the file is at the top level of the project. 203 | 204 | 205 | ## Tracking 206 | 207 | * Package: demo_swift_excel_xlsx_reader_writer 208 | * Version: 3.0.0 209 | * Created: 2016-07-02 210 | * Updated: 2017-09-22 211 | * License: BSD, GPL, MIT 212 | * Contact: Joel Parker Henderson (joel@joelparkerhenderson.com) 213 | -------------------------------------------------------------------------------- /README.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joelparkerhenderson/demo-swift-excel-xlsx-reader-writer/5f683d13ef6ee6577812da27538996506158d3fa/README.png -------------------------------------------------------------------------------- /demo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joelparkerhenderson/demo-swift-excel-xlsx-reader-writer/5f683d13ef6ee6577812da27538996506158d3fa/demo.xlsx -------------------------------------------------------------------------------- /doc/setup/add_carthage_frameworks.md: -------------------------------------------------------------------------------- 1 | # Add Carthage frameworks 2 | 3 | To see if you have Carthage installed, and if the Carthage version is current, run this command: 4 | 5 | $ carthage version 6 | 0.25.0 7 | 8 | If Carthage is not installed, or the version is lower than 0.25.0: 9 | 10 | * Use these [Carthage instructions](https://github.com/Carthage/Carthage) 11 | 12 | 13 | ## Create a Carthage Cartfile 14 | 15 | Create an empty text file named `Cartfile` at the top level of the project. 16 | 17 | Edit the `Cartfile`. 18 | 19 | * You can add any framework you want. 20 | 21 | * For example, you can add this text: 22 | 23 | github "user/example" 24 | 25 | Update. 26 | 27 | $ carthage update 28 | *** Fetching Prelude 29 | *** Downloading Example.framework binary at "2.0" 30 | *** xcodebuild output can be found in /var/folders/… 31 | 32 | 33 | ## Troubleshooting 34 | 35 | To update for just one platform, without using binaries, and with verbose messages: 36 | 37 | ```shell 38 | carthage update --platform ios --no-use-binaries --verbose 39 | ``` 40 | 41 | If you get an error such as "Build Failed. Task failed with exit code..." then try to run: 42 | 43 | 44 | ```shell 45 | rm -rf Carthage/Builds/* 46 | rm -rf Carthage/Checkouts/* 47 | rm -rf ~/Library/Caches/org.carthage.CarthageKit 48 | carthage update --no-use-binaries 49 | ``` 50 | 51 | If you are building just for one plaftorm, such as iOS, then try to ru: 52 | 53 | ```shell 54 | carthage update --platform iOS 55 | ``` 56 | 57 | Some frameworks have subtle bugs with version specification, and you can try changing the Cartfile line from the syntax "~> X.Y.Z" to the syntax "vX.Y.Z", or to a commit hash. 58 | 59 | * `github "danielgindi/Charts" ~> 3.0.1` fails due to build error on some systems. 60 | 61 | * `github "danielgindi/Charts" "v3.0.1"` succeeds. 62 | 63 | If you want to try wiping out everything the Xocde knows about the project, then you can delete derived data, typically like this: 64 | 65 | ```shell 66 | rm -rf ~/Library/Developer/Xcode/DerivedData 67 | ``` 68 | 69 | If you want to build for just one platform, and build binaries and archive them, then run: 70 | 71 | ```shell 72 | carthage build --platform iOS --no-skip-current && carthage archive Example 73 | ``` 74 | 75 | 76 | If you see an error message like this "A shell task (foobar) failed with exit code", then try running the shell command yourself: 77 | 78 | ``` 79 | foobar 80 | ``` 81 | 82 | If you see an error message about git clone failing like this: "A shell task (/usr/bin/env git clone --bare --quiet https://user/Example.git ~/Library/Caches/org.carthage.CarthageKit/dependencies/Example) failed with exit code 128: error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60" then try running the shell command and also using verbose flags: 83 | 84 | ```shell 85 | GIT_SSH_COMMAND="ssh -vvv" \ 86 | /usr/bin/env git clone --verbose --bare --quiet \ 87 | https://github.com/user/Example.git \ 88 | ~/Library/Caches/org.carthage.CarthageKit/dependencies/Example 89 | ``` 90 | 91 | 92 | ## See results 93 | 94 | You can see the results so far, if you want to verify that Carthage is working. 95 | 96 | * There is a new file `Cartfile.resolved`. 97 | 98 | ```shell 99 | $ ls -1 Cartfile* 100 | Cartfile 101 | Cartfile.resolved 102 | ``` 103 | 104 | * The new file `Cartfile.resolved` lists each framework and its exact version number. 105 | 106 | ```shell 107 | $ cat Cartfile.resolved 108 | github "user/Example" "2.0.0" 109 | ``` 110 | 111 | * There is a new directory `Carthage`. 112 | 113 | ```shell 114 | $ ls -1 Carthage 115 | Build 116 | Checkouts 117 | ``` 118 | 119 | 120 | ## Link the framework 121 | 122 | Go to the Xcode project "General" area. 123 | 124 | Scroll down the section "Linked Frameworks and Libraries", with the text that says "Add frameworks & libraries here". 125 | 126 | Tap the "+" icon. 127 | 128 | * A dialog opens that says "Choose frameworks and libraries to add". 129 | 130 | * Tap the button "Add Other..." 131 | 132 | Choose the framework. 133 | 134 | * A file chooser opens. 135 | 136 | * Navigate up a folder, and you see the "Carthage" folder. 137 | 138 | * Open the folder "Carthage", then the folder "Build", then the folder "iOS". 139 | 140 | * Tap the file "Example.framework" (or whatever the name is) to highlight it. 141 | 142 | * Tap "Open" 143 | 144 | The section "Linked Frameworks and Libraries" now shows "Example.framework". 145 | 146 | 147 | ## Create the Run Script 148 | 149 | Go to the Xcode project "Build Phases" settings area. 150 | 151 | * Click the "+" icon, then choose "New Run Script Phase". 152 | 153 | * Click the triangle by the new "Run Script" list item. 154 | 155 | * The "Shell" field should say `/bin/sh`. 156 | 157 | * The larger text field should say `Type a script or drag a script file from your workspace to insert its path`. 158 | 159 | * Set the larger text field to say `/usr/local/bin/carthage copy-frameworks` 160 | 161 | Add input files. 162 | 163 | * In the area "Add input files here", click "+". 164 | 165 | * Set the "Input Files" to `$(SRCROOT)/Carthage/Build/iOS/Example.framework` 166 | 167 | 168 | ## More 169 | 170 | Need help with Carthage? See our repo [demo_swift_carthage](https://github.com/joelparkerhenderson/demo_swift_carthage). 171 | 172 | -------------------------------------------------------------------------------- /doc/setup/carthage_troubleshooting.md: -------------------------------------------------------------------------------- 1 | # Carthage troubleshooting 2 | 3 | If Carthage is not working the way you expect, try these troubleshooting ideas. 4 | 5 | 6 | ## Use verbose 7 | 8 | To use verbose messages: 9 | 10 | ```shell 11 | carthage update --verbose 12 | ``` 13 | 14 | 15 | ## Use platform 16 | 17 | To update for just one platform: 18 | 19 | ```shell 20 | carthage update --platform ios 21 | ``` 22 | 23 | 24 | ## Use builds, not binaries 25 | 26 | To build everything i.e. to not use pre-built binaries: 27 | 28 | ```shell 29 | carthage update --no-use-binaries 30 | ``` 31 | 32 | 33 | ## Force builds 34 | 35 | To force carthage to build everything fresh, and not skip over anything that it thinks is already current: 36 | 37 | ```shell 38 | carthage update --no-skip-current 39 | ``` 40 | 41 | 42 | ## All together 43 | 44 | All the above ideas together: 45 | 46 | ```shell 47 | carthage update --verbose --platform ios --no-use-binaries --no-skip-current 48 | ``` 49 | 50 | 51 | ## Clear caches 52 | 53 | To clear caches: 54 | 55 | ```shell 56 | rm -rf Carthage/Builds/* 57 | rm -rf Carthage/Checkouts/* 58 | rm -rf ~/Library/Caches/org.carthage.CarthageKit 59 | ``` 60 | 61 | 62 | ## Delete derived data 63 | 64 | To erase everything the Xocde knows about the project: 65 | 66 | ```shell 67 | rm -rf ~/Library/Developer/Xcode/DerivedData 68 | ``` 69 | 70 | If you have moved your derived data folder, you can find it by using Xcode project settings and/or Xcode workspace settings. 71 | 72 | 73 | ## Build failed 74 | 75 | If you get an error such as "Build Failed. Task failed with exit code..." then try to do all of the above: 76 | 77 | ```shell 78 | rm -rf Carthage/Builds/* 79 | rm -rf Carthage/Checkouts/* 80 | rm -rf ~/Library/Caches/org.carthage.CarthageKit 81 | rm -rf ~/Library/Developer/Xcode/DerivedData 82 | carthage update --verbose --platform ios --no-use-binaries --no-skip-current 83 | ``` 84 | 85 | 86 | ## Version specification bug 87 | 88 | At least one framework has a reported issue with a subtle bug with a version specification: 89 | 90 | * `github "danielgindi/Charts" ~> 3.0.1` fails due to build error on some systems. 91 | 92 | * `github "danielgindi/Charts" "v3.0.1"` succeeds. 93 | 94 | Try changing the Cartfile line from the syntax "~> X.Y.Z" to the syntax "vX.Y.Z", or to a commit hash. 95 | 96 | 97 | ## A shell task failed 98 | 99 | If you see an error message like this: 100 | 101 | * "A shell task (foobar) failed with exit code" 102 | 103 | Then try running the shell command yourself: 104 | 105 | ```shell 106 | foobar 107 | ``` 108 | 109 | 110 | ## Git clone failed 111 | 112 | If you see an error message about git clone failing like this: 113 | 114 | * "A shell task (/usr/bin/env git clone --bare --quiet https://user/Example.git ~/Library/Caches/org.carthage.CarthageKit/dependencies/Example) failed with exit code 128: error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60" 115 | 116 | Then try running the shell command with git verbose flags, and removing the flag `--quiet`: 117 | 118 | ```shell 119 | GIT_SSH_COMMAND="ssh -vvv" \ 120 | /usr/bin/env git clone --verbose --bare \ 121 | https://github.com/user/Example.git \ 122 | ~/Library/Caches/org.carthage.CarthageKit/dependencies/Example 123 | ``` 124 | 125 | Then you should see output like this: 126 | 127 | ```shell 128 | Cloning into bare repository '~/Library/Caches/org.carthage.CarthageKit/dependencies/Example'... 129 | POST git-upload-pack (gzip 1565 to 800 bytes) 130 | remote: Counting objects: 13890, done. 131 | remote: Compressing objects: 100% (12/12), done. 132 | ``` 133 | 134 | This is a good way to see if an update is having problems due to reaching the remote repository, or due to slow transfer speeds, or due to password issues. 135 | 136 | If you see this error: 137 | 138 | ```shell 139 | error: RPC failed; curl 18 transfer closed with outstanding read data remaining 140 | fatal: The remote end hung up unexpectedly 141 | fatal: early EOF 142 | fatal: index-pack failed 143 | ``` 144 | 145 | Then the problem is likely due to general Internet congestion or similar networking failures. Contact your systems administrator, or Internet service provider, or try using a different WiFi network, or use the command `traceroute` or similar to diagnose any networking issue. 146 | -------------------------------------------------------------------------------- /doc/setup/create_a_new_xcode_project.md: -------------------------------------------------------------------------------- 1 | # Create a new Xcode project 2 | 3 | Launch Xcode. 4 | 5 | Choose "File" → "New" → "Project". 6 | 7 | You see the dialog "Choose a template for your new project". 8 | 9 | * Choose the "iOS" radio button. 10 | 11 | * Choose the template icon you want, such as "Single View Application", or "Master-Detail Application", etc. 12 | 13 | * Tap the button "Next". 14 | 15 | You see the dialog "Choose options for your new project". 16 | 17 | * For "Product Name", type anything you want, such as "Demo". 18 | 19 | * For "Organization Name", type anything you want. Typically this is your company's name, or team's name, or similiar. For example, "Example Company". 20 | 21 | * For "Organization Identifier", type anything you want. Typically this is your company's reverse domain name. For example, "com.example". 22 | 23 | * Tap the button "Next". 24 | 25 | You see the file chooser. 26 | 27 | * Choose where to save your project. 28 | 29 | * Tap the button "Create". 30 | 31 | * Xcode creates the project. 32 | 33 | 34 | ## Signing requires a development team 35 | 36 | If Xcode shows a "Signing" area with a "Status" alert icon, here's how to solve it. 37 | 38 | Xcode may show a message such as "Signing requires a development team. Select a development team in the project editor." 39 | 40 | * In the "Signing" section, choose the "Team" dropdown, and choose your Apple ID. 41 | 42 | * If there's no Apple ID, then you need to add yours: Xcode → Preferences → Accounts → the "+" button → Add Apple ID 43 | 44 | 45 | ## More 46 | 47 | Need help? See our repo [demo_swift_hello_world](https://github.com/joelparkerhenderson/demo_swift_hello_world). 48 | -------------------------------------------------------------------------------- /src/Bridge.h: -------------------------------------------------------------------------------- 1 | #ifndef Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h 2 | #define Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h 3 | #import "XlsxReaderWriter-swift-bridge.h" 4 | #endif /* Demo_Swift_Excel_Xlsx_Reader_Writer_Bridging_Header_h */ 5 | --------------------------------------------------------------------------------