mirror of
https://github.com/darlinghq/darling-cocotron.git
synced 2024-10-08 01:53:28 +00:00
First pass at key value coding from issues 6 and 7, addition of objc framework
This commit is contained in:
parent
578873e3cf
commit
d971345b27
@ -44,6 +44,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
#import <Foundation/NSHost.h>
|
||||
#import <Foundation/NSInvocation.h>
|
||||
#import <Foundation/NSKeyedUnarchiver.h>
|
||||
#import <Foundation/NSKeyValueCoding.h>
|
||||
#import <Foundation/NSLock.h>
|
||||
#import <Foundation/NSMapTable.h>
|
||||
#import <Foundation/NSMethodSignature.h>
|
||||
|
@ -297,7 +297,7 @@
|
||||
6E2805D309747D0400EC542B /* NSPipe_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B309747D0400EC542B /* NSPipe_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
6E2805D509747D0400EC542B /* NSPlatform_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B509747D0400EC542B /* NSPlatform_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
6E2805D709747D0400EC542B /* NSReadInBackground_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B709747D0400EC542B /* NSReadInBackground_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
6E2805D909747D0400EC542B /* NSStreamInputSource_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B909747D0400EC542B /* NSStreamInputSource_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
6E2805D909747D0400EC542B /* NSSocketInputSource_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B909747D0400EC542B /* NSSocketInputSource_windows.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
6E2805DB09747D0400EC542B /* NSString_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805BB09747D0400EC542B /* NSString_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
6E2805DD09747D0400EC542B /* NSTask_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805BD09747D0400EC542B /* NSTask_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
6E2805E909747D1000EC542B /* NSXMLAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805DF09747D1000EC542B /* NSXMLAttribute.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
@ -813,7 +813,7 @@
|
||||
6E71DB21097B5AB50071C089 /* NSPipe_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805B409747D0400EC542B /* NSPipe_win32.m */; };
|
||||
6E71DB22097B5AB70071C089 /* NSPlatform_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805B609747D0400EC542B /* NSPlatform_win32.m */; };
|
||||
6E71DB23097B5AB80071C089 /* NSReadInBackground_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805B809747D0400EC542B /* NSReadInBackground_win32.m */; };
|
||||
6E71DB24097B5AB90071C089 /* NSStreamInputSource_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805BA09747D0400EC542B /* NSStreamInputSource_win32.m */; };
|
||||
6E71DB24097B5AB90071C089 /* NSSocketInputSource_windows.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805BA09747D0400EC542B /* NSSocketInputSource_windows.m */; };
|
||||
6E71DB25097B5ABA0071C089 /* NSString_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805BC09747D0400EC542B /* NSString_win32.m */; };
|
||||
6E71DB26097B5ABB0071C089 /* NSTask_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805BE09747D0400EC542B /* NSTask_win32.m */; };
|
||||
6E8113740A54BA9C000DE3F1 /* objc_msg_sendv.s in Sources */ = {isa = PBXBuildFile; fileRef = 6E28055D09747CC300EC542B /* objc_msg_sendv.s */; };
|
||||
@ -1225,12 +1225,30 @@
|
||||
6EC4AB540A35157600E8D6CA /* NSSocketMonitorSet_Unix.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC4AB520A35157600E8D6CA /* NSSocketMonitorSet_Unix.m */; };
|
||||
6EC4AB550A35157600E8D6CA /* NSSocketMonitorSet_Unix.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EC4AB510A35157600E8D6CA /* NSSocketMonitorSet_Unix.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
6EC4AB560A35157600E8D6CA /* NSSocketMonitorSet_Unix.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC4AB520A35157600E8D6CA /* NSSocketMonitorSet_Unix.m */; };
|
||||
FE35CAED0B4AB85800FE7AB3 /* objc.m in Sources */ = {isa = PBXBuildFile; fileRef = FE35CAEC0B4AB85800FE7AB3 /* objc.m */; };
|
||||
FE35CAEE0B4AB85800FE7AB3 /* objc.m in Sources */ = {isa = PBXBuildFile; fileRef = FE35CAEC0B4AB85800FE7AB3 /* objc.m */; };
|
||||
FE35CAEF0B4AB85800FE7AB3 /* objc.m in Sources */ = {isa = PBXBuildFile; fileRef = FE35CAEC0B4AB85800FE7AB3 /* objc.m */; };
|
||||
FE405A6C0B4450FD001B183D /* NSHTTPURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FE405A6A0B4450FD001B183D /* NSHTTPURLResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FE405A6D0B4450FD001B183D /* NSHTTPURLResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = FE405A6B0B4450FD001B183D /* NSHTTPURLResponse.m */; };
|
||||
FE405A6E0B4450FD001B183D /* NSHTTPURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FE405A6A0B4450FD001B183D /* NSHTTPURLResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FE405A6F0B4450FD001B183D /* NSHTTPURLResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = FE405A6B0B4450FD001B183D /* NSHTTPURLResponse.m */; };
|
||||
FE405A700B4450FD001B183D /* NSHTTPURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FE405A6A0B4450FD001B183D /* NSHTTPURLResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FE405A710B4450FD001B183D /* NSHTTPURLResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = FE405A6B0B4450FD001B183D /* NSHTTPURLResponse.m */; };
|
||||
FEB6CBB00B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FEB6CBB10B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */; };
|
||||
FEB6CBB20B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FEB6CBB30B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */; };
|
||||
FEB6CBB40B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FEB6CBB50B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */; };
|
||||
FEB6CC0F0B4A169C004FADF2 /* objc-class.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC0E0B4A169C004FADF2 /* objc-class.m */; };
|
||||
FEB6CC100B4A169C004FADF2 /* objc-class.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC0E0B4A169C004FADF2 /* objc-class.m */; };
|
||||
FEB6CC110B4A169D004FADF2 /* objc-class.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC0E0B4A169C004FADF2 /* objc-class.m */; };
|
||||
FEB6CC8B0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */; };
|
||||
FEB6CC8C0B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */; };
|
||||
FEB6CC8D0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */; };
|
||||
FEB6CC8E0B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */; };
|
||||
FEB6CC8F0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */; };
|
||||
FEB6CC900B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */; };
|
||||
FEB9D30E0B4374F700C239BB /* NSInputStream_data.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB9D30C0B4374F700C239BB /* NSInputStream_data.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
FEB9D30F0B4374F700C239BB /* NSInputStream_data.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB9D30D0B4374F700C239BB /* NSInputStream_data.m */; };
|
||||
FEB9D3100B4374F700C239BB /* NSInputStream_data.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB9D30C0B4374F700C239BB /* NSInputStream_data.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||
@ -1545,6 +1563,48 @@
|
||||
remoteGlobalIDString = 6EA048CA09E57D5F0067589C;
|
||||
remoteInfo = "Foundation-Linux-i386-gcc-4.0.3-redhat";
|
||||
};
|
||||
FEB6CC470B4A1922004FADF2 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
|
||||
remoteInfo = "objc-Windows-i386";
|
||||
};
|
||||
FEB6CC490B4A1922004FADF2 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = FE4034590B42E8AF00CEC41A;
|
||||
remoteInfo = "objc-Linux-i386";
|
||||
};
|
||||
FEB6CC4B0B4A1922004FADF2 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = FE40348A0B42E94D00CEC41A;
|
||||
remoteInfo = "objc-Solaris-sparc";
|
||||
};
|
||||
FEB6CC4E0B4A1944004FADF2 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
|
||||
remoteInfo = "objc-Windows-i386";
|
||||
};
|
||||
FEB6CC500B4A194C004FADF2 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = FE4034530B42E8AF00CEC41A;
|
||||
remoteInfo = "objc-Linux-i386";
|
||||
};
|
||||
FEB6CC520B4A1952004FADF2 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = FE4034840B42E94D00CEC41A;
|
||||
remoteInfo = "objc-Solaris-sparc";
|
||||
};
|
||||
FEFC42400B0A5D050041512F /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
|
||||
@ -1862,8 +1922,8 @@
|
||||
6E2805B609747D0400EC542B /* NSPlatform_win32.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSPlatform_win32.m; path = platform_win32/NSPlatform_win32.m; sourceTree = "<group>"; };
|
||||
6E2805B709747D0400EC542B /* NSReadInBackground_win32.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSReadInBackground_win32.h; path = platform_win32/NSReadInBackground_win32.h; sourceTree = "<group>"; };
|
||||
6E2805B809747D0400EC542B /* NSReadInBackground_win32.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSReadInBackground_win32.m; path = platform_win32/NSReadInBackground_win32.m; sourceTree = "<group>"; };
|
||||
6E2805B909747D0400EC542B /* NSStreamInputSource_win32.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSStreamInputSource_win32.h; path = platform_win32/NSStreamInputSource_win32.h; sourceTree = "<group>"; };
|
||||
6E2805BA09747D0400EC542B /* NSStreamInputSource_win32.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSStreamInputSource_win32.m; path = platform_win32/NSStreamInputSource_win32.m; sourceTree = "<group>"; };
|
||||
6E2805B909747D0400EC542B /* NSSocketInputSource_windows.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSSocketInputSource_windows.h; path = platform_win32/NSSocketInputSource_windows.h; sourceTree = "<group>"; };
|
||||
6E2805BA09747D0400EC542B /* NSSocketInputSource_windows.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSSocketInputSource_windows.m; path = platform_win32/NSSocketInputSource_windows.m; sourceTree = "<group>"; };
|
||||
6E2805BB09747D0400EC542B /* NSString_win32.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSString_win32.h; path = platform_win32/NSString_win32.h; sourceTree = "<group>"; };
|
||||
6E2805BC09747D0400EC542B /* NSString_win32.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSString_win32.m; path = platform_win32/NSString_win32.m; sourceTree = "<group>"; };
|
||||
6E2805BD09747D0400EC542B /* NSTask_win32.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSTask_win32.h; path = platform_win32/NSTask_win32.h; sourceTree = "<group>"; };
|
||||
@ -1994,8 +2054,15 @@
|
||||
6EC4AB520A35157600E8D6CA /* NSSocketMonitorSet_Unix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSSocketMonitorSet_Unix.m; path = platform_posix/NSSocketMonitorSet_Unix.m; sourceTree = "<group>"; };
|
||||
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||
8DC2EF5B0486A6940098B216 /* Foundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FE35CAEC0B4AB85800FE7AB3 /* objc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = objc.m; sourceTree = "<group>"; };
|
||||
FE405A6A0B4450FD001B183D /* NSHTTPURLResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSHTTPURLResponse.h; sourceTree = "<group>"; };
|
||||
FE405A6B0B4450FD001B183D /* NSHTTPURLResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSHTTPURLResponse.m; sourceTree = "<group>"; };
|
||||
FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NSKeyValueCoding.h; sourceTree = "<group>"; };
|
||||
FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NSKeyValueCoding.m; sourceTree = "<group>"; };
|
||||
FEB6CC0E0B4A169C004FADF2 /* objc-class.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "objc-class.m"; sourceTree = "<group>"; };
|
||||
FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = objc.xcodeproj; path = ../objc/objc.xcodeproj; sourceTree = SOURCE_ROOT; };
|
||||
FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NSKVCMutableArray.h; sourceTree = "<group>"; };
|
||||
FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NSKVCMutableArray.m; sourceTree = "<group>"; };
|
||||
FEB9D30C0B4374F700C239BB /* NSInputStream_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSInputStream_data.h; sourceTree = "<group>"; };
|
||||
FEB9D30D0B4374F700C239BB /* NSInputStream_data.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSInputStream_data.m; sourceTree = "<group>"; };
|
||||
FEB9D31A0B43781500C239BB /* NSOutputStream_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSOutputStream_data.h; sourceTree = "<group>"; };
|
||||
@ -2114,6 +2181,8 @@
|
||||
0867D691FE84028FC02AAC07 /* Foundation */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FEB6CC800B4A1C7A004FADF2 /* NSKeyValueCoding */,
|
||||
FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */,
|
||||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
|
||||
6E280B2909747F1F00EC542B /* Foundation.h */,
|
||||
6E28030D0974787200EC542B /* NSArchiver.h */,
|
||||
@ -2697,8 +2766,10 @@
|
||||
6E28034609747A2500EC542B /* objc */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FEB6CC0E0B4A169C004FADF2 /* objc-class.m */,
|
||||
6E28052609747C8900EC542B /* objc_functions.m */,
|
||||
6E8115B20A55CB99000DE3F1 /* objc_msg_lookup.m */,
|
||||
6E28055F09747CCA00EC542B /* objc_msg_sendv.m */,
|
||||
6E28052709747C8900EC542B /* ObjCArray.h */,
|
||||
6E28052809747C8900EC542B /* ObjCArray.m */,
|
||||
6E28052909747C8900EC542B /* ObjCClass.h */,
|
||||
@ -2720,8 +2791,8 @@
|
||||
6E28053D09747C8900EC542B /* ObjectiveC.m */,
|
||||
6E28055A09747C8F00EC542B /* platform_linux */,
|
||||
6E28055B09747C9900EC542B /* platform_solaris */,
|
||||
6E28055F09747CCA00EC542B /* objc_msg_sendv.m */,
|
||||
6E28055C09747CAC00EC542B /* platform_win32 */,
|
||||
FE35CAEC0B4AB85800FE7AB3 /* objc.m */,
|
||||
);
|
||||
path = objc;
|
||||
sourceTree = "<group>";
|
||||
@ -2802,8 +2873,8 @@
|
||||
6E2805B609747D0400EC542B /* NSPlatform_win32.m */,
|
||||
6E2805B709747D0400EC542B /* NSReadInBackground_win32.h */,
|
||||
6E2805B809747D0400EC542B /* NSReadInBackground_win32.m */,
|
||||
6E2805B909747D0400EC542B /* NSStreamInputSource_win32.h */,
|
||||
6E2805BA09747D0400EC542B /* NSStreamInputSource_win32.m */,
|
||||
6E2805B909747D0400EC542B /* NSSocketInputSource_windows.h */,
|
||||
6E2805BA09747D0400EC542B /* NSSocketInputSource_windows.m */,
|
||||
6E2805BB09747D0400EC542B /* NSString_win32.h */,
|
||||
6E2805BC09747D0400EC542B /* NSString_win32.m */,
|
||||
6E2805BD09747D0400EC542B /* NSTask_win32.h */,
|
||||
@ -2929,6 +3000,27 @@
|
||||
name = NSCharacterSet;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FEB6CC410B4A1922004FADF2 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FEB6CC480B4A1922004FADF2 /* objc.framework */,
|
||||
FEB6CC4A0B4A1922004FADF2 /* objc.framework */,
|
||||
FEB6CC4C0B4A1922004FADF2 /* objc.framework */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FEB6CC800B4A1C7A004FADF2 /* NSKeyValueCoding */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */,
|
||||
FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */,
|
||||
FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */,
|
||||
FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */,
|
||||
);
|
||||
path = NSKeyValueCoding;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FEB9D2F00B42F85100C239BB /* NSConnection */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -3275,6 +3367,8 @@
|
||||
FEB9D6ED0B4440F200C239BB /* NSMessagePortNameServer.h in Headers */,
|
||||
FEB9D7060B44414000C239BB /* NSSocketPortNameServer.h in Headers */,
|
||||
FE405A6E0B4450FD001B183D /* NSHTTPURLResponse.h in Headers */,
|
||||
FEB6CBB40B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */,
|
||||
FEB6CC8D0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -3515,6 +3609,8 @@
|
||||
FEB9D6E90B4440F200C239BB /* NSMessagePortNameServer.h in Headers */,
|
||||
FEB9D7020B44414000C239BB /* NSSocketPortNameServer.h in Headers */,
|
||||
FE405A700B4450FD001B183D /* NSHTTPURLResponse.h in Headers */,
|
||||
FEB6CBB20B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */,
|
||||
FEB6CC8F0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -3659,7 +3755,7 @@
|
||||
6E2805D309747D0400EC542B /* NSPipe_win32.h in Headers */,
|
||||
6E2805D509747D0400EC542B /* NSPlatform_win32.h in Headers */,
|
||||
6E2805D709747D0400EC542B /* NSReadInBackground_win32.h in Headers */,
|
||||
6E2805D909747D0400EC542B /* NSStreamInputSource_win32.h in Headers */,
|
||||
6E2805D909747D0400EC542B /* NSSocketInputSource_windows.h in Headers */,
|
||||
6E2805DB09747D0400EC542B /* NSString_win32.h in Headers */,
|
||||
6E2805DD09747D0400EC542B /* NSTask_win32.h in Headers */,
|
||||
6E2805E909747D1000EC542B /* NSXMLAttribute.h in Headers */,
|
||||
@ -3759,6 +3855,8 @@
|
||||
FEB9D6EB0B4440F200C239BB /* NSMessagePortNameServer.h in Headers */,
|
||||
FEB9D7040B44414000C239BB /* NSSocketPortNameServer.h in Headers */,
|
||||
FE405A6C0B4450FD001B183D /* NSHTTPURLResponse.h in Headers */,
|
||||
FEB6CBB00B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */,
|
||||
FEB6CC8B0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -3779,6 +3877,7 @@
|
||||
6E4D93260A2642BD003D335C /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
FEB6CC530B4A1952004FADF2 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "Foundation-Solaris-sparc";
|
||||
productInstallPath = "$(HOME)/Library/Frameworks";
|
||||
@ -3800,6 +3899,7 @@
|
||||
6EA04A7209E57D5F0067589C /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
FEB6CC510B4A194C004FADF2 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "Foundation-Linux-i386";
|
||||
productInstallPath = "$(HOME)/Library/Frameworks";
|
||||
@ -3821,6 +3921,7 @@
|
||||
6E280B2F09747FCF00EC542B /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
FEB6CC4F0B4A1944004FADF2 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "Foundation-Windows-i386";
|
||||
productInstallPath = "$(HOME)/Library/Frameworks";
|
||||
@ -3838,6 +3939,12 @@
|
||||
mainGroup = 0867D691FE84028FC02AAC07 /* Foundation */;
|
||||
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
|
||||
projectDirPath = "";
|
||||
projectReferences = (
|
||||
{
|
||||
ProductGroup = FEB6CC410B4A1922004FADF2 /* Products */;
|
||||
ProjectRef = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
|
||||
},
|
||||
);
|
||||
targets = (
|
||||
8DC2EF4F0486A6940098B216 /* Foundation-Windows-i386 */,
|
||||
6EA048CA09E57D5F0067589C /* Foundation-Linux-i386 */,
|
||||
@ -3847,6 +3954,30 @@
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXReferenceProxy section */
|
||||
FEB6CC480B4A1922004FADF2 /* objc.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = objc.framework;
|
||||
remoteRef = FEB6CC470B4A1922004FADF2 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
FEB6CC4A0B4A1922004FADF2 /* objc.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = objc.framework;
|
||||
remoteRef = FEB6CC490B4A1922004FADF2 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
FEB6CC4C0B4A1922004FADF2 /* objc.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = objc.framework;
|
||||
remoteRef = FEB6CC4B0B4A1922004FADF2 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
/* End PBXReferenceProxy section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
6E4D93160A2642BD003D335C /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
@ -4145,6 +4276,10 @@
|
||||
FEB9D6EE0B4440F200C239BB /* NSMessagePortNameServer.m in Sources */,
|
||||
FEB9D7070B44414000C239BB /* NSSocketPortNameServer.m in Sources */,
|
||||
FE405A6F0B4450FD001B183D /* NSHTTPURLResponse.m in Sources */,
|
||||
FEB6CBB50B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */,
|
||||
FEB6CC100B4A169C004FADF2 /* objc-class.m in Sources */,
|
||||
FEB6CC8E0B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */,
|
||||
FE35CAEF0B4AB85800FE7AB3 /* objc.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -4385,6 +4520,10 @@
|
||||
FEB9D6EA0B4440F200C239BB /* NSMessagePortNameServer.m in Sources */,
|
||||
FEB9D7030B44414000C239BB /* NSSocketPortNameServer.m in Sources */,
|
||||
FE405A710B4450FD001B183D /* NSHTTPURLResponse.m in Sources */,
|
||||
FEB6CBB30B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */,
|
||||
FEB6CC110B4A169D004FADF2 /* objc-class.m in Sources */,
|
||||
FEB6CC900B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */,
|
||||
FE35CAED0B4AB85800FE7AB3 /* objc.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -4577,7 +4716,7 @@
|
||||
6E71DB21097B5AB50071C089 /* NSPipe_win32.m in Sources */,
|
||||
6E71DB22097B5AB70071C089 /* NSPlatform_win32.m in Sources */,
|
||||
6E71DB23097B5AB80071C089 /* NSReadInBackground_win32.m in Sources */,
|
||||
6E71DB24097B5AB90071C089 /* NSStreamInputSource_win32.m in Sources */,
|
||||
6E71DB24097B5AB90071C089 /* NSSocketInputSource_windows.m in Sources */,
|
||||
6E71DB25097B5ABA0071C089 /* NSString_win32.m in Sources */,
|
||||
6E71DB26097B5ABB0071C089 /* NSTask_win32.m in Sources */,
|
||||
6E903FFB0A07B65500938799 /* NSConstantString.m in Sources */,
|
||||
@ -4629,6 +4768,10 @@
|
||||
FEB9D6EC0B4440F200C239BB /* NSMessagePortNameServer.m in Sources */,
|
||||
FEB9D7050B44414000C239BB /* NSSocketPortNameServer.m in Sources */,
|
||||
FE405A6D0B4450FD001B183D /* NSHTTPURLResponse.m in Sources */,
|
||||
FEB6CBB10B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */,
|
||||
FEB6CC0F0B4A169C004FADF2 /* objc-class.m in Sources */,
|
||||
FEB6CC8C0B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */,
|
||||
FE35CAEE0B4AB85800FE7AB3 /* objc.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -4645,6 +4788,21 @@
|
||||
target = 6EA048CA09E57D5F0067589C /* Foundation-Linux-i386 */;
|
||||
targetProxy = 6E3877330A0A78F800643D29 /* PBXContainerItemProxy */;
|
||||
};
|
||||
FEB6CC4F0B4A1944004FADF2 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = "objc-Windows-i386";
|
||||
targetProxy = FEB6CC4E0B4A1944004FADF2 /* PBXContainerItemProxy */;
|
||||
};
|
||||
FEB6CC510B4A194C004FADF2 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = "objc-Linux-i386";
|
||||
targetProxy = FEB6CC500B4A194C004FADF2 /* PBXContainerItemProxy */;
|
||||
};
|
||||
FEB6CC530B4A1952004FADF2 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = "objc-Solaris-sparc";
|
||||
targetProxy = FEB6CC520B4A1952004FADF2 /* PBXContainerItemProxy */;
|
||||
};
|
||||
FEFC42410B0A5D050041512F /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 6E4D91880A2642BD003D335C /* Foundation-Solaris-sparc */;
|
||||
@ -4677,6 +4835,7 @@
|
||||
INSTALL_PATH = /Developer/Cocotron/1.0/Windows/i386/Frameworks;
|
||||
OTHER_CFLAGS = (
|
||||
"-DFOUNDATION_INSIDE_BUILD",
|
||||
"-DOBJC_INSIDE_BUILD",
|
||||
"-D__LITTLE_ENDIAN__",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
@ -4722,6 +4881,7 @@
|
||||
INSTALL_PATH = /Developer/Cocotron/1.0/Solaris/sparc/Frameworks;
|
||||
OTHER_CFLAGS = (
|
||||
"-DFOUNDATION_INSIDE_BUILD",
|
||||
"-DOBJC_INSIDE_BUILD",
|
||||
"-D__BIG_ENDIAN__",
|
||||
"-fPIC",
|
||||
);
|
||||
@ -4751,6 +4911,7 @@
|
||||
INSTALL_PATH = /Developer/Cocotron/1.0/Linux/i386/Frameworks;
|
||||
OTHER_CFLAGS = (
|
||||
"-DFOUNDATION_INSIDE_BUILD",
|
||||
"-DOBJC_INSIDE_BUILD",
|
||||
"-D__LITTLE_ENDIAN__",
|
||||
"-fPIC",
|
||||
);
|
||||
|
@ -33,12 +33,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
return NSAllocateObject(self,0,zone);
|
||||
}
|
||||
|
||||
|
||||
-init {
|
||||
return [self initWithObjects:NULL count:0];
|
||||
}
|
||||
|
||||
|
||||
-initWithArray:(NSArray *)array {
|
||||
unsigned count=[array count];
|
||||
id *objects=alloca(sizeof(id)*count);
|
||||
|
@ -18,4 +18,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
return NSArray_concreteNew(NULL,objects,count);
|
||||
}
|
||||
|
||||
-init {
|
||||
return [self initWithObjects:NULL count:0];
|
||||
}
|
||||
|
||||
@end
|
||||
|
39
Foundation/NSKeyValueCoding/NSKVCMutableArray.h
Normal file
39
Foundation/NSKeyValueCoding/NSKVCMutableArray.h
Normal file
@ -0,0 +1,39 @@
|
||||
/* Copyright (c) 2006-2007 Johannes Fortmann
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
#import <Foundation/NSMutableArray.h>
|
||||
|
||||
@interface NSKVCMutableArray : NSMutableArray
|
||||
{
|
||||
id proxyObject;
|
||||
id key;
|
||||
IMP insert;
|
||||
IMP remove;
|
||||
IMP replace;
|
||||
IMP objectAtIndex;
|
||||
IMP count;
|
||||
IMP accessor;
|
||||
IMP setter;
|
||||
SEL insertSel;
|
||||
SEL removeSel;
|
||||
SEL replaceSel;
|
||||
SEL objectAtIndexSel;
|
||||
SEL countSel;
|
||||
SEL accessorSel;
|
||||
SEL setterSel;
|
||||
}
|
||||
-(id)initWithKey:(id)theKey forProxyObject:(id)object;
|
||||
|
||||
- (unsigned)count;
|
||||
- (id)objectAtIndex:(unsigned)index;
|
||||
|
||||
- (void)addObject:(id)anObject;
|
||||
- (void)insertObject:(id)anObject atIndex:(unsigned)index;
|
||||
- (void)removeLastObject;
|
||||
- (void)removeObjectAtIndex:(unsigned)index;
|
||||
- (void)replaceObjectAtIndex:(unsigned)index withObject:(id)anObject;
|
||||
@end
|
146
Foundation/NSKeyValueCoding/NSKVCMutableArray.m
Normal file
146
Foundation/NSKeyValueCoding/NSKVCMutableArray.m
Normal file
@ -0,0 +1,146 @@
|
||||
/* Copyright (c) 2006-2007 Johannes Fortmann
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
#import "NSKVCMutableArray.h"
|
||||
#import <Foundation/NSString.h>
|
||||
#import <Foundation/NSKeyValueCoding.h>
|
||||
|
||||
@implementation NSKVCMutableArray
|
||||
-(id)initWithKey:(id)theKey forProxyObject:(id)object
|
||||
{
|
||||
[super init];
|
||||
|
||||
proxyObject = [object retain];
|
||||
key = [theKey retain];
|
||||
id ukey=[key capitalizedString];
|
||||
|
||||
insertSel = NSSelectorFromString([NSString stringWithFormat:@"insertObject:in%@AtIndex:", ukey]);
|
||||
removeSel = NSSelectorFromString([NSString stringWithFormat:@"removeObjectFrom%@AtIndex:", ukey]);
|
||||
replaceSel = NSSelectorFromString([NSString stringWithFormat:@"replaceObjectIn%@AtIndex:withObject:", ukey]);
|
||||
accessorSel = NSSelectorFromString(key);
|
||||
objectAtIndexSel = NSSelectorFromString([NSString stringWithFormat:@"objectIn%@AtIndex:", ukey]);
|
||||
setterSel = NSSelectorFromString([NSString stringWithFormat:@"set%@:", ukey]);
|
||||
countSel = NSSelectorFromString([NSString stringWithFormat:@"countOf%@", ukey]);
|
||||
|
||||
if([proxyObject respondsToSelector:insertSel])
|
||||
insert=[proxyObject methodForSelector:insertSel];
|
||||
if([proxyObject respondsToSelector:replaceSel])
|
||||
replace=[proxyObject methodForSelector:replaceSel];
|
||||
if([proxyObject respondsToSelector:removeSel])
|
||||
remove=[proxyObject methodForSelector:removeSel];
|
||||
if([proxyObject respondsToSelector:accessorSel])
|
||||
accessor=[proxyObject methodForSelector:accessorSel];
|
||||
if([proxyObject respondsToSelector:setterSel])
|
||||
setter=[proxyObject methodForSelector:setterSel];
|
||||
if([proxyObject respondsToSelector:objectAtIndexSel])
|
||||
objectAtIndex=[proxyObject methodForSelector:objectAtIndexSel];
|
||||
if([proxyObject respondsToSelector:countSel])
|
||||
count=[proxyObject methodForSelector:countSel];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
-(id)_representedObject
|
||||
{
|
||||
if(accessor)
|
||||
return accessor(proxyObject, accessorSel);
|
||||
return [proxyObject valueForKey:key];
|
||||
}
|
||||
|
||||
-(void)_setRepresentedObject:(id)object
|
||||
{
|
||||
if(setter)
|
||||
setter(proxyObject, setterSel, object);
|
||||
else
|
||||
[proxyObject setValue:object forKey:key];
|
||||
}
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
[key release];
|
||||
[proxyObject release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (unsigned)count;
|
||||
{
|
||||
if(count)
|
||||
return (int)count(proxyObject, countSel);
|
||||
return [[self _representedObject] count];
|
||||
}
|
||||
|
||||
- (id)objectAtIndex:(unsigned)index;
|
||||
{
|
||||
if(objectAtIndex)
|
||||
return objectAtIndex(proxyObject, objectAtIndexSel, index);
|
||||
return [[self _representedObject] objectAtIndex:index];
|
||||
}
|
||||
|
||||
- (void)addObject:(id)anObject;
|
||||
{
|
||||
if(insert)
|
||||
insert(proxyObject, insertSel, anObject, [self count]);
|
||||
else
|
||||
{
|
||||
id target=[[self _representedObject] mutableCopy];
|
||||
[target addObject:anObject];
|
||||
[self _setRepresentedObject:target];
|
||||
[target release];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)insertObject:(id)anObject atIndex:(unsigned)index;
|
||||
{
|
||||
if(insert)
|
||||
insert(proxyObject, insertSel, anObject, index);
|
||||
else
|
||||
{
|
||||
id target=[[self _representedObject] mutableCopy];
|
||||
[target insertObject:anObject atIndex:index];
|
||||
[self _setRepresentedObject:target];
|
||||
[target release];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)removeLastObject;
|
||||
{
|
||||
if(remove)
|
||||
remove(proxyObject, removeSel, [self count]-1);
|
||||
else
|
||||
{
|
||||
id target=[[self _representedObject] mutableCopy];
|
||||
[target removeLastObject];
|
||||
[self _setRepresentedObject:target];
|
||||
[target release];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)removeObjectAtIndex:(unsigned)index;
|
||||
{
|
||||
if(remove)
|
||||
remove(proxyObject, removeSel, index);
|
||||
else
|
||||
{
|
||||
id target=[[self _representedObject] mutableCopy];
|
||||
[target removeObjectAtIndex:index];
|
||||
[self _setRepresentedObject:target];
|
||||
[target release];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)replaceObjectAtIndex:(unsigned)index withObject:(id)anObject;
|
||||
{
|
||||
if(replace)
|
||||
replace(proxyObject, replaceSel, index, anObject);
|
||||
else
|
||||
{
|
||||
[self removeObjectAtIndex:index];
|
||||
[self insertObject:anObject atIndex:index];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
35
Foundation/NSKeyValueCoding/NSKeyValueCoding.h
Normal file
35
Foundation/NSKeyValueCoding/NSKeyValueCoding.h
Normal file
@ -0,0 +1,35 @@
|
||||
/* Copyright (c) 2006-2007 Johannes Fortmann
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
#import <Foundation/NSObject.h>
|
||||
|
||||
@class NSDictionary, NSArray, NSError;
|
||||
|
||||
@interface NSObject (KeyValueCoding)
|
||||
+(BOOL)accessInstanceVariablesDirectly;
|
||||
|
||||
// primitive methods
|
||||
-(id)valueForKey:(NSString*)key;
|
||||
-(void)setValue:(id)value forKey:(NSString *)key;
|
||||
-(BOOL)validateValue:(id *)ioValue forKey:(NSString *)key error:(NSError **)outError;
|
||||
|
||||
// key path methods
|
||||
-(id)valueForKeyPath:(NSString*)keyPath;
|
||||
-(void)setValue:(id)value forKeyPath:(NSString *)keyPath;
|
||||
-(BOOL)validateValue:(id *)ioValue forKeyPath:(NSString *)keyPath error:(NSError **)outError;
|
||||
|
||||
// dictionary methods
|
||||
-(NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
|
||||
-(void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;
|
||||
|
||||
// undefined keys etc.
|
||||
-(id)valueForUndefinedKey:(NSString *)key;
|
||||
-(void)setValue:(id)value forUndefinedKey:(NSString *)key;
|
||||
-(void)setNilValueForKey:(id)key;
|
||||
|
||||
-(id)mutableArrayValueForKey:(id)key;
|
||||
@end
|
359
Foundation/NSKeyValueCoding/NSKeyValueCoding.m
Normal file
359
Foundation/NSKeyValueCoding/NSKeyValueCoding.m
Normal file
@ -0,0 +1,359 @@
|
||||
/* Copyright (c) 2006-2007 Johannes Fortmann
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
#import <Foundation/NSKeyValueCoding.h>
|
||||
#import <Foundation/NSArray.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSException.h>
|
||||
#import <Foundation/NSEnumerator.h>
|
||||
#import <Foundation/NSNull.h>
|
||||
#import <Foundation/NSValue.h>
|
||||
#import <Foundation/NSString.h>
|
||||
#import <Foundation/NSInvocation.h>
|
||||
#import <Foundation/NSMethodSignature.h>
|
||||
#include <objc/objc-class.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#import "NSKVCMutableArray.h"
|
||||
|
||||
@implementation NSObject (KeyValueCoding)
|
||||
#pragma mark -
|
||||
#pragma mark Private helper methods
|
||||
-(void)_demangleTypeEncoding:(const char*)type to:(char*)cleanType
|
||||
{
|
||||
while(*type)
|
||||
{
|
||||
if(*type=='"')
|
||||
{
|
||||
type++;
|
||||
while(*type && *type!='"')
|
||||
type++;
|
||||
type++;
|
||||
}
|
||||
*cleanType=*type;
|
||||
type++; cleanType++;
|
||||
*cleanType=0;
|
||||
}
|
||||
}
|
||||
|
||||
-(id)_wrapValue:(void*)value ofType:(const char*)type
|
||||
{
|
||||
if(type[0]!='@' && strlen(type)>1)
|
||||
{
|
||||
// valueWithBytes:objCType: doesn't like quotes in its types
|
||||
char* cleanType=alloca(strlen(type)+1);
|
||||
[self _demangleTypeEncoding:type to:cleanType];
|
||||
|
||||
return [NSValue valueWithBytes:value objCType:cleanType];
|
||||
}
|
||||
|
||||
switch(type[0])
|
||||
{
|
||||
case '@':
|
||||
return *(id*)value;
|
||||
case 'i':
|
||||
return [NSNumber numberWithInt:*(int*)value];
|
||||
case 'I':
|
||||
return [NSNumber numberWithUnsignedInt:*(int*)value];
|
||||
case 'f':
|
||||
return [NSNumber numberWithFloat:*(float*)value];
|
||||
case 'd':
|
||||
return [NSNumber numberWithDouble:*(double*)value];
|
||||
case 's':
|
||||
return [NSNumber numberWithShort:*(short*)value];
|
||||
case 'S':
|
||||
return [NSNumber numberWithUnsignedShort:*(unsigned short*)value];
|
||||
default:
|
||||
// FIX #warning some wrapping types unimplemented
|
||||
return [NSString stringWithFormat:@"FIXME: wrap value of type %s unimplemented for get", type];
|
||||
}
|
||||
}
|
||||
|
||||
-(BOOL)_setValue:(id)value toBuffer:(void*)buffer ofType:(const char*)type
|
||||
{
|
||||
if(type[0]!='@' && strlen(type)>1)
|
||||
{
|
||||
char* cleanType=alloca(strlen(type)+1);
|
||||
[self _demangleTypeEncoding:type to:cleanType];
|
||||
|
||||
if(strcmp([value objCType], cleanType))
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
[value getValue:buffer];
|
||||
return YES;
|
||||
}
|
||||
|
||||
switch(type[0])
|
||||
{
|
||||
case '@':
|
||||
*(id*)buffer = value;
|
||||
return YES;
|
||||
case 'i':
|
||||
*(int*)buffer = [value intValue];
|
||||
return YES;
|
||||
case 'I':
|
||||
*(unsigned int*)buffer = [value unsignedIntValue];
|
||||
return YES;
|
||||
case 'f':
|
||||
*(float*)buffer = [value floatValue];
|
||||
return YES;
|
||||
case 'd':
|
||||
*(double*)buffer = [value doubleValue];
|
||||
return YES;
|
||||
|
||||
default:
|
||||
// FIX #warning some wrapping types unimplemented
|
||||
NSLog(@"FIXME: wrap value of type %s unimplemented for set", type);
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
-(id)_wrapReturnValueForSelector:(SEL)sel
|
||||
{
|
||||
id sig=[self methodSignatureForSelector:sel];
|
||||
const char* type=[sig methodReturnType];
|
||||
if(strcmp(type, "@"))
|
||||
{
|
||||
id inv=[NSInvocation invocationWithMethodSignature:sig];
|
||||
[inv setSelector:sel];
|
||||
[inv setTarget:self];
|
||||
[inv invoke];
|
||||
|
||||
int returnLength=[sig methodReturnLength];
|
||||
void *returnValue=alloca(returnLength);
|
||||
[inv getReturnValue:returnValue];
|
||||
|
||||
return [self _wrapValue:returnValue ofType:type];
|
||||
}
|
||||
return [self performSelector:sel];
|
||||
}
|
||||
|
||||
-(void)_setValue:(id)value withSelector:(SEL)sel fromKey:(id)key
|
||||
{
|
||||
id sig=[self methodSignatureForSelector:sel];
|
||||
const char* type=[sig getArgumentTypeAtIndex:2];
|
||||
if(strcmp(type, "@"))
|
||||
{
|
||||
if(!value)
|
||||
{
|
||||
// value is nil and accessor doesn't take object type
|
||||
return [self setNilValueForKey:key];
|
||||
}
|
||||
unsigned int size, align;
|
||||
id inv=[NSInvocation invocationWithMethodSignature:sig];
|
||||
[inv setSelector:sel];
|
||||
[inv setTarget:self];
|
||||
|
||||
NSGetSizeAndAlignment(type, &size, &align);
|
||||
void *buffer=alloca(size);
|
||||
[self _setValue:value toBuffer:buffer ofType:type];
|
||||
|
||||
[inv setArgument:buffer atIndex:2];
|
||||
|
||||
[inv invoke];
|
||||
return;
|
||||
}
|
||||
[self performSelector:sel withObject:value];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Primary methods
|
||||
|
||||
-(id)valueForKey:(NSString*)key
|
||||
{
|
||||
SEL sel=NSSelectorFromString(key);
|
||||
// FIXME: getKey, _getKey, isKey, _isKey are missing
|
||||
|
||||
if([self respondsToSelector:sel])
|
||||
{
|
||||
return [self _wrapReturnValueForSelector:sel];
|
||||
}
|
||||
|
||||
if([isa accessInstanceVariablesDirectly])
|
||||
{
|
||||
sel=NSSelectorFromString([NSString stringWithFormat:@"_%@", key]);
|
||||
if([self respondsToSelector:sel])
|
||||
{
|
||||
return [self _wrapReturnValueForSelector:sel];
|
||||
}
|
||||
|
||||
Ivar ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"_%@", key] cString]);
|
||||
if(!ivar)
|
||||
ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"%@", key] cString]);
|
||||
if(ivar)
|
||||
{
|
||||
return [self _wrapValue:(void*)self+ivar->ivar_offset ofType:ivar->ivar_type];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return [self valueForUndefinedKey:key];
|
||||
}
|
||||
|
||||
- (void)setValue:(id)value forKey:(NSString *)key
|
||||
{
|
||||
id ukey = [key capitalizedString];
|
||||
SEL sel = NSSelectorFromString([NSString stringWithFormat:@"set%@:", ukey]);
|
||||
if([self respondsToSelector:sel])
|
||||
{
|
||||
return [self _setValue:value withSelector:sel fromKey:key];
|
||||
}
|
||||
|
||||
if([isa accessInstanceVariablesDirectly])
|
||||
{
|
||||
sel = NSSelectorFromString([NSString stringWithFormat:@"_set%@:", ukey]);
|
||||
if([self respondsToSelector:sel])
|
||||
{
|
||||
return [self _setValue:value withSelector:sel fromKey:key];
|
||||
}
|
||||
|
||||
Ivar ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"_%@", key] cString]);
|
||||
if(!ivar)
|
||||
ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"_is%@", ukey] cString]);
|
||||
if(!ivar)
|
||||
ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"%@", key] cString]);
|
||||
if(!ivar)
|
||||
ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"is%@", ukey] cString]);
|
||||
|
||||
if(ivar)
|
||||
{
|
||||
// if value is nil and ivar is not an object type
|
||||
if(!value && ivar->ivar_type[0]!='@')
|
||||
return [self setNilValueForKey:key];
|
||||
|
||||
if([self _setValue:value toBuffer:(void*)self+ivar->ivar_offset ofType:ivar->ivar_type])
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
[self setValue:value forUndefinedKey:key];
|
||||
}
|
||||
|
||||
- (BOOL)validateValue:(id *)ioValue forKey:(NSString *)key error:(NSError **)outError
|
||||
{
|
||||
SEL sel=NSSelectorFromString([NSString stringWithFormat:@"validate%@:error:", [key capitalizedString]]);
|
||||
if([self respondsToSelector:sel])
|
||||
{
|
||||
id inv=[NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:sel]];
|
||||
[inv setSelector:sel];
|
||||
[inv setTarget:self];
|
||||
[inv setArgument:ioValue atIndex:2];
|
||||
[inv setArgument:outError atIndex:3];
|
||||
[inv invoke];
|
||||
BOOL ret;
|
||||
[inv getReturnValue:&ret];
|
||||
return ret;
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Secondary methods
|
||||
+(BOOL)accessInstanceVariablesDirectly
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (id)valueForUndefinedKey:(NSString *)key
|
||||
{
|
||||
[NSException raise:@"NSUndefinedKeyException"
|
||||
format:@"%@: trying to get undefined key %@", [self className], key];
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
|
||||
{
|
||||
[NSException raise:@"NSUndefinedKeyException"
|
||||
format:@"%@: trying to set undefined key %@", [self className], key];
|
||||
}
|
||||
|
||||
-(void)setNilValueForKey:(id)key
|
||||
{
|
||||
[NSException raise:@"NSInvalidArgumentException"
|
||||
format:@"%@: trying to set nil value for key %@", [self className], key];
|
||||
}
|
||||
|
||||
-(id)valueForKeyPath:(NSString*)keyPath
|
||||
{
|
||||
// FIXME: operators missing
|
||||
id en=[[keyPath componentsSeparatedByString:@"."] objectEnumerator];
|
||||
id pathComponent;
|
||||
id ret=self;
|
||||
while((pathComponent = [en nextObject]) && ret)
|
||||
{
|
||||
ret = [ret valueForKey:pathComponent];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath
|
||||
{
|
||||
id array=[[[keyPath componentsSeparatedByString:@"."] mutableCopy] autorelease];
|
||||
id lastPathComponent=[array lastObject];
|
||||
[array removeObject:lastPathComponent];
|
||||
id en=[array objectEnumerator];
|
||||
id pathComponent;
|
||||
id ret=self;
|
||||
while((pathComponent = [en nextObject]) && ret)
|
||||
{
|
||||
ret = [ret valueForKey:pathComponent];
|
||||
}
|
||||
[ret setValue:value forKey:lastPathComponent];
|
||||
}
|
||||
|
||||
- (BOOL)validateValue:(id *)ioValue forKeyPath:(NSString *)keyPath error:(NSError **)outError
|
||||
{
|
||||
id array=[[[keyPath componentsSeparatedByString:@"."] mutableCopy] autorelease];
|
||||
id lastPathComponent=[array lastObject];
|
||||
[array removeObject:lastPathComponent];
|
||||
id en=[array objectEnumerator];
|
||||
id pathComponent;
|
||||
id ret=self;
|
||||
while((pathComponent = [en nextObject]) && ret)
|
||||
{
|
||||
ret = [ret valueForKey:pathComponent];
|
||||
}
|
||||
return [self validateValue:ioValue forKey:lastPathComponent error:outError];
|
||||
}
|
||||
|
||||
|
||||
-(NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys
|
||||
{
|
||||
id en=[keys objectEnumerator];
|
||||
id ret=[NSMutableDictionary dictionary];
|
||||
id key;
|
||||
while(key=[en nextObject])
|
||||
{
|
||||
id value=[self valueForKey:key];
|
||||
[ret setObject:value ? value : [NSNull null] forKey:key];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues
|
||||
{
|
||||
id en=[keyedValues keyEnumerator];
|
||||
NSString* key;
|
||||
NSNull* null=[NSNull null];
|
||||
while(key=[en nextObject])
|
||||
{
|
||||
id value=[keyedValues objectForKey:key];
|
||||
[self setValue:value == null ? nil : value forKey:key];
|
||||
}
|
||||
}
|
||||
|
||||
-(id)mutableArrayValueForKey:(id)key
|
||||
{
|
||||
return [[[NSKVCMutableArray alloc] initWithKey:key forProxyObject:self] autorelease];
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
|
@ -9,8 +9,9 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
#import <Foundation/NSInputStream.h>
|
||||
|
||||
@interface NSInputStream_data : NSInputStream {
|
||||
NSData *_data;
|
||||
unsigned _position;
|
||||
NSStreamStatus _status;
|
||||
NSData *_data;
|
||||
unsigned _position;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@ -8,6 +8,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
#import <Foundation/NSInputStream.h>
|
||||
|
||||
@interface NSInputStream_file : NSInputStream {
|
||||
NSStreamStatus _status;
|
||||
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
|
||||
@interface NSInputStream_socket : NSInputStream {
|
||||
NSStreamStatus _status;
|
||||
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
#import <Foundation/NSOutputStream.h>
|
||||
|
||||
@interface NSOutputStream_buffer : NSOutputStream {
|
||||
NSStreamStatus _status;
|
||||
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
@class NSMutableData;
|
||||
|
||||
@interface NSOutputStream_data : NSOutputStream {
|
||||
NSStreamStatus _status;
|
||||
NSMutableData *_data;
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
#import <Foundation/NSOutputStream.h>
|
||||
|
||||
@interface NSOutputStream_file : NSOutputStream {
|
||||
NSStreamStatus _status;
|
||||
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
#import <Foundation/NSOutputStream.h>
|
||||
|
||||
@interface NSOutputStream_socket : NSOutputStream {
|
||||
NSStreamStatus _status;
|
||||
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
#import <Foundation/ObjCHashTable.h>
|
||||
#import <Foundation/ObjCTypes.h>
|
||||
#import <Foundation/ObjCSelector.h>
|
||||
#import <objc/objc-class.h>
|
||||
|
||||
enum {
|
||||
CLASS_INFO_CLASS=0x001,
|
||||
@ -18,12 +19,6 @@ enum {
|
||||
CLASS_INFO_LINKED=0x100
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
char *type;
|
||||
int offset;
|
||||
} OBJCInstanceVariable;
|
||||
|
||||
typedef struct {
|
||||
int count;
|
||||
OBJCInstanceVariable list[1];
|
||||
|
@ -97,7 +97,7 @@ static OBJCInstanceVariable *instanceVariableWithName(OBJCClassTemplate *class,c
|
||||
int i;
|
||||
|
||||
for(i=0;ivarList!=NULL && i<ivarList->count;i++){
|
||||
if(strcmp(ivarList->list[i].name,name)==0)
|
||||
if(strcmp(ivarList->list[i].ivar_name,name)==0)
|
||||
return &(ivarList->list[i]);
|
||||
}
|
||||
if(class->isa->isa==class)
|
||||
@ -120,7 +120,7 @@ void OBJCSetInstanceVariable(id object,const char *name,void *value) {
|
||||
OBJCInstanceVariable *ivar=instanceVariableWithName(object->isa,name);
|
||||
|
||||
if(ivar!=NULL)
|
||||
ivarCopy(object,ivar->offset,value,sizeof(id));
|
||||
ivarCopy(object,ivar->ivar_offset,value,sizeof(id));
|
||||
}
|
||||
|
||||
BOOL OBJCIsKindOfClass(id object,Class kindOf) {
|
||||
|
25
Foundation/objc/objc-class.m
Normal file
25
Foundation/objc/objc-class.m
Normal file
@ -0,0 +1,25 @@
|
||||
/* Copyright (c) 2007 Christopher J. W. Lloyd
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
#import <objc/objc-class.h>
|
||||
#import <Foundation/OBJCClass.h>
|
||||
|
||||
Ivar class_getInstanceVariable(Class class,const char *variableName) {
|
||||
for(;;class=class->superclass){
|
||||
OBJCInstanceVariableList *ivarList=class->ivars;
|
||||
int i;
|
||||
|
||||
for(i=0;ivarList!=NULL && i<ivarList->count;i++){
|
||||
if(strcmp(ivarList->list[i].ivar_name,variableName)==0)
|
||||
return &(ivarList->list[i]);
|
||||
}
|
||||
if(class->isa->isa==class)
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
7
Foundation/objc/objc.m
Normal file
7
Foundation/objc/objc.m
Normal file
@ -0,0 +1,7 @@
|
||||
/* Copyright (c) 2007 Christopher J. W. Lloyd
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
@ -19,7 +19,7 @@ enum {
|
||||
XYXSocketExceptionalActivity=4
|
||||
};
|
||||
|
||||
@interface NSStreamInputSource_win32 : NSInputSource {
|
||||
@interface NSSocketInputSource_windows : NSInputSource {
|
||||
SOCKET _socket;
|
||||
int _index;
|
||||
id _delegate;
|
||||
@ -44,11 +44,11 @@ enum {
|
||||
|
||||
@end
|
||||
|
||||
@interface NSObject(NSStreamInputSource_win32_delegate)
|
||||
@interface NSObject(NSSocketInputSource_windows_delegate)
|
||||
|
||||
-(void)activityMonitorIndicatesReadable:(NSStreamInputSource_win32 *)activityMonitor;
|
||||
-(void)activityMonitorIndicatesWriteable:(NSStreamInputSource_win32 *)activityMonitor;
|
||||
-(void)activityMonitorIndicatesException:(NSStreamInputSource_win32 *)activityMonitor;
|
||||
-(void)activityMonitorIndicatesReadable:(NSSocketInputSource_windows *)activityMonitor;
|
||||
-(void)activityMonitorIndicatesWriteable:(NSSocketInputSource_windows *)activityMonitor;
|
||||
-(void)activityMonitorIndicatesException:(NSSocketInputSource_windows *)activityMonitor;
|
||||
|
||||
@end
|
||||
#endif
|
@ -8,7 +8,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
// Original - Christopher Lloyd <cjwl@objc.net>
|
||||
#if defined(WIN32)
|
||||
#import <Foundation/NSStreamInputSource_win32.h>
|
||||
#import <Foundation/NSSocketInputSource_windows.h>
|
||||
#import <Foundation/NSArray.h>
|
||||
#import <Foundation/NSRunLoop.h>
|
||||
#import <Foundation/NSDate.h>
|
||||
@ -17,10 +17,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
typedef struct {
|
||||
unsigned _max;
|
||||
fd_set *_set;
|
||||
} YRSelectSet;
|
||||
} Win32SelectSet;
|
||||
|
||||
YRSelectSet *YRSelectSetNew() {
|
||||
YRSelectSet *sset=NSZoneMalloc(NSDefaultMallocZone(),sizeof(YRSelectSet));
|
||||
Win32SelectSet *Win32SelectSetNew() {
|
||||
Win32SelectSet *sset=NSZoneMalloc(NSDefaultMallocZone(),sizeof(Win32SelectSet));
|
||||
|
||||
sset->_max=FD_SETSIZE;
|
||||
|
||||
@ -30,17 +30,17 @@ YRSelectSet *YRSelectSetNew() {
|
||||
return sset;
|
||||
}
|
||||
|
||||
void YRSelectSetDealloc(YRSelectSet *sset) {
|
||||
void Win32SelectSetDealloc(Win32SelectSet *sset) {
|
||||
NSZoneFree(NSDefaultMallocZone(),sset->_set);
|
||||
NSZoneFree(NSDefaultMallocZone(),sset);
|
||||
}
|
||||
|
||||
void YRSelectSetZero(YRSelectSet *sset) {
|
||||
void Win32SelectSetZero(Win32SelectSet *sset) {
|
||||
sset->_set->fd_count=0;
|
||||
|
||||
}
|
||||
|
||||
void YRSelectSetClear(YRSelectSet *sset,SOCKET socket) {
|
||||
void Win32SelectSetClear(Win32SelectSet *sset,SOCKET socket) {
|
||||
int i;
|
||||
|
||||
for(i=0;i<sset->_set->fd_count;i++){
|
||||
@ -56,7 +56,7 @@ void YRSelectSetClear(YRSelectSet *sset,SOCKET socket) {
|
||||
|
||||
}
|
||||
|
||||
void YRSelectSetSet(YRSelectSet *sset,SOCKET socket) {
|
||||
void Win32SelectSetSet(Win32SelectSet *sset,SOCKET socket) {
|
||||
if(sset->_set->fd_count>=sset->_max){
|
||||
sset->_max*=2;
|
||||
sset->_set=NSZoneRealloc(NSDefaultMallocZone(),sset->_set,
|
||||
@ -65,7 +65,7 @@ void YRSelectSetSet(YRSelectSet *sset,SOCKET socket) {
|
||||
sset->_set->fd_array[sset->_set->fd_count++]=socket;
|
||||
}
|
||||
|
||||
BOOL YRSelectSetIsSet(YRSelectSet *sset,SOCKET socket) {
|
||||
BOOL Win32SelectSetIsSet(Win32SelectSet *sset,SOCKET socket) {
|
||||
int i;
|
||||
|
||||
for(i=0;i<sset->_set->fd_count;i++)
|
||||
@ -75,28 +75,28 @@ BOOL YRSelectSetIsSet(YRSelectSet *sset,SOCKET socket) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
fd_set *YRSelectSetFDSet(YRSelectSet *sset) {
|
||||
fd_set *Win32SelectSetFDSet(Win32SelectSet *sset) {
|
||||
return sset->_set;
|
||||
}
|
||||
|
||||
NSString *YRSocketErrorStringFromCode(int code) {
|
||||
NSString *Win32SocketErrorStringFromCode(int code) {
|
||||
return [NSString stringWithFormat:@"code=%d",code];
|
||||
}
|
||||
|
||||
NSString *YRSocketErrorString(void) {
|
||||
return YRSocketErrorStringFromCode(WSAGetLastError());
|
||||
NSString *Win32SocketErrorString(void) {
|
||||
return Win32SocketErrorStringFromCode(WSAGetLastError());
|
||||
}
|
||||
|
||||
BOOL _YRSocketAssert(int r,int line,const char *file){
|
||||
if(r<0){
|
||||
NSLog(@"socket error %@ at %d in %s",YRSocketErrorString(),line,file);
|
||||
NSLog(@"socket error %@ at %d in %s",Win32SocketErrorString(),line,file);
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
#define YRSocketAssert(call) _YRSocketAssert(call,__LINE__,__FILE__)
|
||||
#define Win32SocketAssert(call) _YRSocketAssert(call,__LINE__,__FILE__)
|
||||
|
||||
@implementation NSStreamInputSource_win32
|
||||
@implementation NSSocketInputSource_windows
|
||||
|
||||
static HANDLE eventHandle=NULL;
|
||||
static NSHandleMonitor_win32 *eventMonitor=nil;
|
||||
@ -114,20 +114,20 @@ static volatile struct monitorStruct {
|
||||
} *monitors;
|
||||
|
||||
static WINAPI DWORD selectThread(LPVOID arg){
|
||||
YRSelectSet *readset,*writeset,*exceptset;
|
||||
Win32SelectSet *readset,*writeset,*exceptset;
|
||||
int i,nfds;
|
||||
unsigned activity;
|
||||
|
||||
readset=YRSelectSetNew();
|
||||
writeset=YRSelectSetNew();
|
||||
exceptset=YRSelectSetNew();
|
||||
readset=Win32SelectSetNew();
|
||||
writeset=Win32SelectSetNew();
|
||||
exceptset=Win32SelectSetNew();
|
||||
|
||||
while(YES){
|
||||
BOOL setEvent;
|
||||
|
||||
YRSelectSetZero(readset);
|
||||
YRSelectSetZero(writeset);
|
||||
YRSelectSetZero(exceptset);
|
||||
Win32SelectSetZero(readset);
|
||||
Win32SelectSetZero(writeset);
|
||||
Win32SelectSetZero(exceptset);
|
||||
|
||||
EnterCriticalSection (threadLock);
|
||||
nfds=0;
|
||||
@ -137,26 +137,26 @@ static WINAPI DWORD selectThread(LPVOID arg){
|
||||
nfds=monitors[i].socket;
|
||||
|
||||
if(monitors[i].activity&XYXSocketReadableActivity)
|
||||
YRSelectSetSet(readset,monitors[i].socket);
|
||||
Win32SelectSetSet(readset,monitors[i].socket);
|
||||
|
||||
if(monitors[i].activity&XYXSocketWritableActivity)
|
||||
YRSelectSetSet(writeset,monitors[i].socket);
|
||||
Win32SelectSetSet(writeset,monitors[i].socket);
|
||||
|
||||
if(monitors[i].activity&XYXSocketExceptionalActivity)
|
||||
YRSelectSetSet(exceptset,monitors[i].socket);
|
||||
Win32SelectSetSet(exceptset,monitors[i].socket);
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection (threadLock);
|
||||
nfds++;
|
||||
|
||||
YRSelectSetSet(readset,threadPingRead);
|
||||
Win32SelectSetSet(readset,threadPingRead);
|
||||
if(nfds<=threadPingRead)
|
||||
nfds=threadPingRead+1;
|
||||
|
||||
if(select(nfds,YRSelectSetFDSet(readset),YRSelectSetFDSet(writeset), YRSelectSetFDSet(exceptset),NULL)<0)
|
||||
if(select(nfds,Win32SelectSetFDSet(readset),Win32SelectSetFDSet(writeset), Win32SelectSetFDSet(exceptset),NULL)<0)
|
||||
continue;
|
||||
|
||||
if(YRSelectSetIsSet(readset,threadPingRead)){
|
||||
if(Win32SelectSetIsSet(readset,threadPingRead)){
|
||||
char buf[4096];
|
||||
|
||||
recv(threadPingRead,buf,4096,0);
|
||||
@ -170,11 +170,11 @@ static WINAPI DWORD selectThread(LPVOID arg){
|
||||
if(monitors[i].socket==INVALID_SOCKET)
|
||||
continue;
|
||||
|
||||
if(YRSelectSetIsSet(readset,monitors[i].socket))
|
||||
if(Win32SelectSetIsSet(readset,monitors[i].socket))
|
||||
activity|=XYXSocketReadableActivity;
|
||||
if(YRSelectSetIsSet(writeset,monitors[i].socket))
|
||||
if(Win32SelectSetIsSet(writeset,monitors[i].socket))
|
||||
activity|=XYXSocketWritableActivity;
|
||||
if(YRSelectSetIsSet(exceptset,monitors[i].socket))
|
||||
if(Win32SelectSetIsSet(exceptset,monitors[i].socket))
|
||||
activity|=XYXSocketExceptionalActivity;
|
||||
|
||||
if(activity!=XYXSocketNoActivity){
|
||||
@ -202,19 +202,19 @@ static void createPingPair(int pair[2]){
|
||||
struct sockaddr_in address;
|
||||
int namelen;
|
||||
|
||||
YRSocketAssert(readSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP));
|
||||
YRSocketAssert(writeSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP));
|
||||
Win32SocketAssert(readSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP));
|
||||
Win32SocketAssert(writeSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP));
|
||||
|
||||
byteZero(&address,sizeof(struct sockaddr_in));
|
||||
address.sin_family=AF_INET;
|
||||
address.sin_addr.s_addr=inet_addr("127.0.0.1");
|
||||
address.sin_port=0;
|
||||
YRSocketAssert(bind(readSocket,(struct sockaddr *)&address,
|
||||
Win32SocketAssert(bind(readSocket,(struct sockaddr *)&address,
|
||||
sizeof(struct sockaddr_in)));
|
||||
namelen=sizeof(address);
|
||||
YRSocketAssert (getsockname(readSocket,(struct sockaddr *)&address,&namelen));
|
||||
Win32SocketAssert (getsockname(readSocket,(struct sockaddr *)&address,&namelen));
|
||||
|
||||
YRSocketAssert(connect(writeSocket,(struct sockaddr *)&address,
|
||||
Win32SocketAssert(connect(writeSocket,(struct sockaddr *)&address,
|
||||
sizeof(struct sockaddr_in)));
|
||||
|
||||
pair[0]=readSocket;
|
||||
@ -247,7 +247,7 @@ static void createPingPair(int pair[2]){
|
||||
}
|
||||
|
||||
-(void)pingThread {
|
||||
YRSocketAssert(send(threadPingWrite," ",1,0));
|
||||
Win32SocketAssert(send(threadPingWrite," ",1,0));
|
||||
}
|
||||
|
||||
+(void)handleMonitorIndicatesSignaled:(NSHandleMonitor_win32 *)monitor {
|
26
objc/Info.plist
Normal file
26
objc/Info.plist
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.cocotron.objc</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
17
objc/objc-class.h
Normal file
17
objc/objc-class.h
Normal file
@ -0,0 +1,17 @@
|
||||
/* Copyright (c) 2007 Christopher J. W. Lloyd
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
|
||||
#import <objc/objc-export.h>
|
||||
|
||||
typedef struct objc_ivar {
|
||||
char *ivar_name;
|
||||
char *ivar_type;
|
||||
int ivar_offset;
|
||||
} *Ivar, OBJCInstanceVariable;
|
||||
|
||||
OBJC_EXPORT Ivar class_getInstanceVariable(Class class,const char *variableName);
|
19
objc/objc-export.h
Normal file
19
objc/objc-export.h
Normal file
@ -0,0 +1,19 @@
|
||||
/* Copyright (c) 2007 Christopher J. W. Lloyd
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
|
||||
#import <stdlib.h>
|
||||
|
||||
#if defined(__WIN32__)
|
||||
#if defined(OBJC_INSIDE_BUILD)
|
||||
#define OBJC_EXPORT __declspec(dllexport)
|
||||
#else
|
||||
#define OBJC_EXPORT __declspec(dllimport)
|
||||
#endif
|
||||
#else
|
||||
#define OBJC_EXPORT extern
|
||||
#endif
|
10
objc/objc.h
Normal file
10
objc/objc.h
Normal file
@ -0,0 +1,10 @@
|
||||
/* Copyright (c) 2007 Christopher J. W. Lloyd
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
|
||||
#import <objc/objc-export.h>
|
||||
|
460
objc/objc.xcodeproj/project.pbxproj
Normal file
460
objc/objc.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,460 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 42;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXAggregateTarget section */
|
||||
FE4034A10B42F1BC00CEC41A /* objc */ = {
|
||||
isa = PBXAggregateTarget;
|
||||
buildConfigurationList = FE4034AE0B42F1D600CEC41A /* Build configuration list for PBXAggregateTarget "objc" */;
|
||||
buildPhases = (
|
||||
);
|
||||
dependencies = (
|
||||
FE4034A30B42F1C100CEC41A /* PBXTargetDependency */,
|
||||
FE4034A50B42F1C400CEC41A /* PBXTargetDependency */,
|
||||
FE4034A70B42F1C800CEC41A /* PBXTargetDependency */,
|
||||
);
|
||||
name = objc;
|
||||
productName = objc;
|
||||
};
|
||||
/* End PBXAggregateTarget section */
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
FE4034BA0B42F24C00CEC41A /* objc-class.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034B90B42F24C00CEC41A /* objc-class.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FE4034BB0B42F24C00CEC41A /* objc-class.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034B90B42F24C00CEC41A /* objc-class.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FE4034BC0B42F24C00CEC41A /* objc-class.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034B90B42F24C00CEC41A /* objc-class.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FE4034CF0B42F2C400CEC41A /* objc.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034CE0B42F2C400CEC41A /* objc.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FE4034D00B42F2C400CEC41A /* objc.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034CE0B42F2C400CEC41A /* objc.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FE4034D10B42F2C400CEC41A /* objc.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034CE0B42F2C400CEC41A /* objc.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FEB6CBFA0B4A1584004FADF2 /* objc-export.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBF90B4A1584004FADF2 /* objc-export.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FEB6CBFB0B4A1584004FADF2 /* objc-export.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBF90B4A1584004FADF2 /* objc-export.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
FEB6CBFC0B4A1584004FADF2 /* objc-export.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBF90B4A1584004FADF2 /* objc-export.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXBuildRule section */
|
||||
FE4034350B42E73300CEC41A /* PBXBuildRule */ = {
|
||||
isa = PBXBuildRule;
|
||||
compilerSpec = org.cocotron.1.0.windows.i386.gcc.4_0_3;
|
||||
fileType = sourcecode.c;
|
||||
isEditable = 1;
|
||||
outputFiles = (
|
||||
);
|
||||
};
|
||||
FE4034560B42E8AF00CEC41A /* PBXBuildRule */ = {
|
||||
isa = PBXBuildRule;
|
||||
compilerSpec = org.cocotron.1.0.linux.i386.gcc.4_0_3;
|
||||
fileType = sourcecode.c;
|
||||
isEditable = 1;
|
||||
outputFiles = (
|
||||
);
|
||||
};
|
||||
FE4034870B42E94D00CEC41A /* PBXBuildRule */ = {
|
||||
isa = PBXBuildRule;
|
||||
compilerSpec = org.cocotron.1.0.linux.i386.gcc.4_0_3;
|
||||
fileType = sourcecode.c;
|
||||
isEditable = 1;
|
||||
outputFiles = (
|
||||
);
|
||||
};
|
||||
/* End PBXBuildRule section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
FE4034A20B42F1C100CEC41A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
|
||||
remoteInfo = "objc-Windows-i386";
|
||||
};
|
||||
FE4034A40B42F1C400CEC41A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = FE4034530B42E8AF00CEC41A;
|
||||
remoteInfo = "objc-Linux-i386";
|
||||
};
|
||||
FE4034A60B42F1C800CEC41A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = FE4034840B42E94D00CEC41A;
|
||||
remoteInfo = "objc-Solaris-sparc";
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||
8DC2EF5B0486A6940098B216 /* objc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = objc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FE4034590B42E8AF00CEC41A /* objc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = objc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FE40348A0B42E94D00CEC41A /* objc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = objc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FE4034B90B42F24C00CEC41A /* objc-class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "objc-class.h"; sourceTree = "<group>"; };
|
||||
FE4034CE0B42F2C400CEC41A /* objc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objc.h; sourceTree = "<group>"; };
|
||||
FEB6CBF90B4A1584004FADF2 /* objc-export.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "objc-export.h"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
034768DFFF38A50411DB9C8B /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8DC2EF5B0486A6940098B216 /* objc.framework */,
|
||||
FE4034590B42E8AF00CEC41A /* objc.framework */,
|
||||
FE40348A0B42E94D00CEC41A /* objc.framework */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0867D691FE84028FC02AAC07 /* objc */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
08FB77AEFE84172EC02AAC07 /* Classes */,
|
||||
32C88DFF0371C24200C91783 /* Other Sources */,
|
||||
089C1665FE841158C02AAC07 /* Resources */,
|
||||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
|
||||
034768DFFF38A50411DB9C8B /* Products */,
|
||||
);
|
||||
name = objc;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */,
|
||||
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */,
|
||||
);
|
||||
name = "External Frameworks and Libraries";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
089C1665FE841158C02AAC07 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8DC2EF5A0486A6940098B216 /* Info.plist */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
08FB77AEFE84172EC02AAC07 /* Classes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FE4034B90B42F24C00CEC41A /* objc-class.h */,
|
||||
FE4034CE0B42F2C400CEC41A /* objc.h */,
|
||||
FEB6CBF90B4A1584004FADF2 /* objc-export.h */,
|
||||
);
|
||||
name = Classes;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = "Linked Frameworks";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = "Other Frameworks";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
32C88DFF0371C24200C91783 /* Other Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = "Other Sources";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
8DC2EF500486A6940098B216 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
FE4034BA0B42F24C00CEC41A /* objc-class.h in Headers */,
|
||||
FE4034D00B42F2C400CEC41A /* objc.h in Headers */,
|
||||
FEB6CBFA0B4A1584004FADF2 /* objc-export.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
FE4034540B42E8AF00CEC41A /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
FE4034BB0B42F24C00CEC41A /* objc-class.h in Headers */,
|
||||
FE4034CF0B42F2C400CEC41A /* objc.h in Headers */,
|
||||
FEB6CBFC0B4A1584004FADF2 /* objc-export.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
FE4034850B42E94D00CEC41A /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
FE4034BC0B42F24C00CEC41A /* objc-class.h in Headers */,
|
||||
FE4034D10B42F2C400CEC41A /* objc.h in Headers */,
|
||||
FEB6CBFB0B4A1584004FADF2 /* objc-export.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
8DC2EF4F0486A6940098B216 /* objc-Windows-i386 */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "objc-Windows-i386" */;
|
||||
buildPhases = (
|
||||
8DC2EF500486A6940098B216 /* Headers */,
|
||||
8DC2EF520486A6940098B216 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
FE4034350B42E73300CEC41A /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "objc-Windows-i386";
|
||||
productInstallPath = "$(HOME)/Library/Frameworks";
|
||||
productName = objc;
|
||||
productReference = 8DC2EF5B0486A6940098B216 /* objc.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
FE4034530B42E8AF00CEC41A /* objc-Linux-i386 */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = FE4034570B42E8AF00CEC41A /* Build configuration list for PBXNativeTarget "objc-Linux-i386" */;
|
||||
buildPhases = (
|
||||
FE4034540B42E8AF00CEC41A /* Headers */,
|
||||
FE4034550B42E8AF00CEC41A /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
FE4034560B42E8AF00CEC41A /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "objc-Linux-i386";
|
||||
productInstallPath = "$(HOME)/Library/Frameworks";
|
||||
productName = objc;
|
||||
productReference = FE4034590B42E8AF00CEC41A /* objc.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
FE4034840B42E94D00CEC41A /* objc-Solaris-sparc */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = FE4034880B42E94D00CEC41A /* Build configuration list for PBXNativeTarget "objc-Solaris-sparc" */;
|
||||
buildPhases = (
|
||||
FE4034850B42E94D00CEC41A /* Headers */,
|
||||
FE4034860B42E94D00CEC41A /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
FE4034870B42E94D00CEC41A /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "objc-Solaris-sparc";
|
||||
productInstallPath = "$(HOME)/Library/Frameworks";
|
||||
productName = objc;
|
||||
productReference = FE40348A0B42E94D00CEC41A /* objc.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
0867D690FE84028FC02AAC07 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "objc" */;
|
||||
hasScannedForEncodings = 1;
|
||||
mainGroup = 0867D691FE84028FC02AAC07 /* objc */;
|
||||
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
|
||||
projectDirPath = "";
|
||||
targets = (
|
||||
8DC2EF4F0486A6940098B216 /* objc-Windows-i386 */,
|
||||
FE4034530B42E8AF00CEC41A /* objc-Linux-i386 */,
|
||||
FE4034840B42E94D00CEC41A /* objc-Solaris-sparc */,
|
||||
FE4034A10B42F1BC00CEC41A /* objc */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
8DC2EF520486A6940098B216 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
FE4034550B42E8AF00CEC41A /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
FE4034860B42E94D00CEC41A /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
FE4034A30B42F1C100CEC41A /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 8DC2EF4F0486A6940098B216 /* objc-Windows-i386 */;
|
||||
targetProxy = FE4034A20B42F1C100CEC41A /* PBXContainerItemProxy */;
|
||||
};
|
||||
FE4034A50B42F1C400CEC41A /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = FE4034530B42E8AF00CEC41A /* objc-Linux-i386 */;
|
||||
targetProxy = FE4034A40B42F1C400CEC41A /* PBXContainerItemProxy */;
|
||||
};
|
||||
FE4034A70B42F1C800CEC41A /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = FE4034840B42E94D00CEC41A /* objc-Solaris-sparc */;
|
||||
targetProxy = FE4034A60B42F1C800CEC41A /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
1DEB91AF08733DA50010E9CD /* Deployment */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = i386;
|
||||
DEPLOYMENT_LOCATION = YES;
|
||||
DSTROOT = /;
|
||||
EXECUTABLE_SUFFIX = .1.0.dll;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
INSTALL_PATH = /Developer/Cocotron/1.0/Windows/i386/Frameworks;
|
||||
OTHER_CFLAGS = (
|
||||
"-DOBJC_INSIDE_BUILD",
|
||||
"-D__LITTLE_ENDIAN__",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
"-shared",
|
||||
"-Wl,--enable-auto-import",
|
||||
"-Wl,--export-all-symbols",
|
||||
"-Wl,--out-implib,$TARGET_BUILD_DIR/$(PRODUCT_NAME).framework/lib$(PRODUCT_NAME).a",
|
||||
);
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = objc;
|
||||
SYMROOT = /Developer/Cocotron/1.0/build/objc/Windows/i386;
|
||||
};
|
||||
name = Deployment;
|
||||
};
|
||||
1DEB91B308733DA50010E9CD /* Deployment */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Deployment;
|
||||
};
|
||||
FE4034580B42E8AF00CEC41A /* Deployment */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = i386;
|
||||
DEPLOYMENT_LOCATION = YES;
|
||||
DSTROOT = /;
|
||||
EXECUTABLE_SUFFIX = .so;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
INSTALL_PATH = /Developer/Cocotron/1.0/Linux/i386/Frameworks;
|
||||
OTHER_CFLAGS = (
|
||||
"-DOBJC_INSIDE_BUILD",
|
||||
"-D__LITTLE_ENDIAN__",
|
||||
"-fPIC",
|
||||
);
|
||||
OTHER_LDFLAGS = "-shared";
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = objc;
|
||||
SYMROOT = /Developer/Cocotron/1.0/build/objc/Linux/i386;
|
||||
};
|
||||
name = Deployment;
|
||||
};
|
||||
FE4034890B42E94D00CEC41A /* Deployment */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = sparc;
|
||||
DEPLOYMENT_LOCATION = YES;
|
||||
DSTROOT = /;
|
||||
EXECUTABLE_SUFFIX = .so;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
INSTALL_PATH = /Developer/Cocotron/1.0/Solaris/sparc/Frameworks;
|
||||
OTHER_CFLAGS = (
|
||||
"-DOBJC_INSIDE_BUILD",
|
||||
"-D__BIG_ENDIAN__",
|
||||
"-fPIC",
|
||||
);
|
||||
OTHER_LDFLAGS = "-shared";
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = objc;
|
||||
SYMROOT = /Developer/Cocotron/1.0/build/objc/Solaris/sparc;
|
||||
};
|
||||
name = Deployment;
|
||||
};
|
||||
FE4034AF0B42F1D600CEC41A /* Deployment */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
PRODUCT_NAME = objc;
|
||||
ZERO_LINK = NO;
|
||||
};
|
||||
name = Deployment;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "objc-Windows-i386" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1DEB91AF08733DA50010E9CD /* Deployment */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Deployment;
|
||||
};
|
||||
1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "objc" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1DEB91B308733DA50010E9CD /* Deployment */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Deployment;
|
||||
};
|
||||
FE4034570B42E8AF00CEC41A /* Build configuration list for PBXNativeTarget "objc-Linux-i386" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
FE4034580B42E8AF00CEC41A /* Deployment */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Deployment;
|
||||
};
|
||||
FE4034880B42E94D00CEC41A /* Build configuration list for PBXNativeTarget "objc-Solaris-sparc" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
FE4034890B42E94D00CEC41A /* Deployment */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Deployment;
|
||||
};
|
||||
FE4034AE0B42F1D600CEC41A /* Build configuration list for PBXAggregateTarget "objc" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
FE4034AF0B42F1D600CEC41A /* Deployment */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Deployment;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
|
||||
}
|
Loading…
Reference in New Issue
Block a user