Index: .gitignore ================================================================== --- .gitignore +++ .gitignore @@ -1,10 +1,9 @@ *.a *.bundle *.dll *.dylib -*.map *.o *.orig *.so *.so.* *~ @@ -29,10 +28,11 @@ ObjFW.xcodeproj/*.pbxuser ObjFW.xcodeproj/project.xcworkspace ObjFW.xcodeproj/xcuserdata src/objfw-defs.h src/ObjFW +tests/*.map tests/tests tests/tests.arm9 tests/tests.exe tests/tests.nds tests/EBOOT.PBP Index: ObjFW.xcodeproj/project.pbxproj ================================================================== --- ObjFW.xcodeproj/project.pbxproj +++ ObjFW.xcodeproj/project.pbxproj @@ -407,10 +407,11 @@ 4BDF37B51338055600F9A81A /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BDF37B41338055600F9A81A /* config.h */; }; 4BE52D2117B990B4005958D1 /* OFZIPArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE52D1F17B990B4005958D1 /* OFZIPArchive.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4BE52D2217B990B4005958D1 /* OFZIPArchive.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE52D2017B990B4005958D1 /* OFZIPArchive.m */; }; 4BE52D2517B990DA005958D1 /* OFChecksumFailedException.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE52D2317B990DA005958D1 /* OFChecksumFailedException.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4BE52D2617B990DA005958D1 /* OFChecksumFailedException.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE52D2417B990DA005958D1 /* OFChecksumFailedException.m */; }; + 4BEAF52D19A811DA00B61868 /* module.map in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4BEAF52519A8107500B61868 /* module.map */; }; 4BF33AFB133807590059CEF7 /* ObjFW.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B3D23761337FBC800DD29B8 /* ObjFW.framework */; }; 4BF33AFC133807A20059CEF7 /* OFArrayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B6EF66E1235358D0076B512 /* OFArrayTests.m */; }; 4BF33AFD133807A20059CEF7 /* OFBlockTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5F0E412DF4259005C7A0C /* OFBlockTests.m */; }; 4BF33AFE133807A20059CEF7 /* OFDataArrayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B6EF66F1235358D0076B512 /* OFDataArrayTests.m */; }; 4BF33AFF133807A20059CEF7 /* OFDateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5F0E512DF4259005C7A0C /* OFDateTests.m */; }; @@ -475,10 +476,20 @@ remoteInfo = ObjFW; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 4BEAF52C19A811CE00B61868 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ObjFW.framework; + dstSubfolderSpec = 16; + files = ( + 4BEAF52D19A811DA00B61868 /* module.map in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4BF33AEE133807310059CEF7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 12; dstPath = plugin; dstSubfolderSpec = 16; @@ -895,10 +906,11 @@ 4BE5F0D812DF4225005C7A0C /* OFConstantString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFConstantString.m; path = src/OFConstantString.m; sourceTree = SOURCE_ROOT; }; 4BE5F0D912DF4225005C7A0C /* OFDate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFDate.h; path = src/OFDate.h; sourceTree = SOURCE_ROOT; }; 4BE5F0DA12DF4225005C7A0C /* OFDate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFDate.m; path = src/OFDate.m; sourceTree = SOURCE_ROOT; }; 4BE5F0E412DF4259005C7A0C /* OFBlockTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFBlockTests.m; path = tests/OFBlockTests.m; sourceTree = SOURCE_ROOT; }; 4BE5F0E512DF4259005C7A0C /* OFDateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFDateTests.m; path = tests/OFDateTests.m; sourceTree = SOURCE_ROOT; }; + 4BEAF52519A8107500B61868 /* module.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.map; sourceTree = SOURCE_ROOT; }; 4BF0749512DFAFCA00A4ADD1 /* OFURLTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFURLTests.m; path = tests/OFURLTests.m; sourceTree = SOURCE_ROOT; }; 4BF1BCBF11C9663F0025511F /* objfw-defs.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "objfw-defs.h.in"; path = "src/objfw-defs.h.in"; sourceTree = ""; }; 4BF1BCC011C9663F0025511F /* OFHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFHash.h; path = src/OFHash.h; sourceTree = ""; }; 4BF1BCC211C9663F0025511F /* OFMD5Hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFMD5Hash.h; path = src/OFMD5Hash.h; sourceTree = ""; }; 4BF1BCC311C9663F0025511F /* OFMD5Hash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFMD5Hash.m; path = src/OFMD5Hash.m; sourceTree = ""; }; @@ -1152,10 +1164,11 @@ isa = PBXGroup; children = ( 4B3D23BB1337FC5800DD29B8 /* Info.plist */, 4B19023A1338D6A2000374C9 /* Makefile */, 4BDF37B41338055600F9A81A /* config.h */, + 4BEAF52519A8107500B61868 /* module.map */, 4BD98C011338140B0048DD5B /* objfw-defs.h */, ); name = "Supporting Files"; path = ObjFW; sourceTree = ""; @@ -1762,11 +1775,11 @@ buildConfigurationList = 4B3D23861337FBC800DD29B8 /* Build configuration list for PBXNativeTarget "ObjFW" */; buildPhases = ( 4B3D23711337FBC800DD29B8 /* Sources */, 4B3D23721337FBC800DD29B8 /* Frameworks */, 4B3D23731337FBC800DD29B8 /* Headers */, - 4B3D23741337FBC800DD29B8 /* Resources */, + 4BEAF52C19A811CE00B61868 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 4B8BA41C133805A700E65070 /* PBXTargetDependency */, @@ -1831,17 +1844,10 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 4B187E0C163EA29F0049A832 /* Resources */ = { isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4B3D23741337FBC800DD29B8 /* Resources */ = { - isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; ADDED module.map Index: module.map ================================================================== --- module.map +++ module.map @@ -0,0 +1,5 @@ +framework module ObjFW { + umbrella header "ObjFW.h" + + export * +} Index: src/OFObject.m ================================================================== --- src/OFObject.m +++ src/OFObject.m @@ -1116,6 +1116,17 @@ + mutableCopyWithZone: (void*)zone { OF_UNRECOGNIZED_SELECTOR } + +/* Required to use ObjFW from Swift */ ++ allocWithZone: (void*)zone +{ + if OF_UNLIKELY (zone != NULL) { + [self doesNotRecognizeSelector: _cmd]; + abort(); + } + + return [self alloc]; +} @end Index: src/OFString.h ================================================================== --- src/OFString.h +++ src/OFString.h @@ -1110,12 +1110,24 @@ #import "OFString+URLEncoding.h" #import "OFString+XMLEscaping.h" #import "OFString+XMLUnescaping.h" #ifndef NSINTEGER_DEFINED -/* Required for string boxing literals to work */ -@compatibility_alias NSString OFString; +/* + * Very *ugly* hack required for string boxing literals to work. + * + * This hack is needed in order to work with `@class NSString` from Apple's + * objc/NSString.h - which is included when using modules - as + * @compatibility_alias does not work if @class has been used before. + * For some reason, this makes Clang refer to OFString for string box literals + * and not to NSString (which would result in a linker error, but would be the + * correct behavior). + * + * TODO: Submit a patch for Clang that makes the boxing classes configurable! + */ +@interface NSString: OFString +@end #endif #ifdef __cplusplus extern "C" { #endif