Skip to content

Commit b70ed44

Browse files
committed
add support for diff objc class runtime name
1 parent 1f15fd4 commit b70ed44

28 files changed

+765
-92
lines changed

NativeScript/CMakeLists.txt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -361,11 +361,19 @@ if(TARGET_ENGINE_JSC)
361361
endif()
362362

363363
if(TARGET_ENGINE_V8)
364-
target_link_directories(
365-
${NAME}
366-
PRIVATE
367-
${CMAKE_CURRENT_SOURCE_DIR}/../Frameworks/v8
368-
)
364+
if (TARGET_PLATFORM_MACOS)
365+
target_link_directories(
366+
${NAME}
367+
PRIVATE
368+
${CMAKE_CURRENT_SOURCE_DIR}/../Frameworks/v8_macos
369+
)
370+
else()
371+
target_link_directories(
372+
${NAME}
373+
PRIVATE
374+
${CMAKE_CURRENT_SOURCE_DIR}/../Frameworks/v8_ios
375+
)
376+
endif()
369377

370378
target_link_libraries(
371379
${NAME}

NativeScript/Info.plist

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>$(DEVELOPMENT_LANGUAGE)</string>
7+
<key>CFBundleExecutable</key>
8+
<string>$(EXECUTABLE_NAME)</string>
9+
<key>CFBundleIdentifier</key>
10+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11+
<key>CFBundleInfoDictionaryVersion</key>
12+
<string>6.0</string>
13+
<key>CFBundleName</key>
14+
<string>$(PRODUCT_NAME)</string>
15+
<key>CFBundlePackageType</key>
16+
<string>FMWK</string>
17+
<key>CFBundleShortVersionString</key>
18+
<string>1.0</string>
19+
<key>CFBundleVersion</key>
20+
<string>$(CURRENT_PROJECT_VERSION)</string>
21+
</dict>
22+
</plist>

NativeScript/ffi/Class.mm

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@
2121
MDSectionOffset originalOffset = offset;
2222
auto nameOffset = metadata->getOffset(offset);
2323
offset += sizeof(MDSectionOffset);
24+
auto runtimeNameOffset = metadata->getOffset(offset);
25+
offset += sizeof(MDSectionOffset);
2426
bool hasProtocols = (nameOffset & mdSectionOffsetNext) != 0;
2527
nameOffset &= ~mdSectionOffsetNext;
2628
auto name = metadata->resolveString(nameOffset);
27-
29+
auto runtimeName = name;
30+
if (runtimeNameOffset != MD_SECTION_OFFSET_NULL) {
31+
runtimeName = metadata->resolveString(runtimeNameOffset);
32+
}
2833
while (hasProtocols) {
2934
auto protocolOffset = metadata->getOffset(offset);
3035
offset += sizeof(MDSectionOffset);
@@ -56,7 +61,7 @@
5661
}
5762
}
5863

59-
auto nativeClass = objc_getClass(name);
64+
auto nativeClass = objc_getClass(runtimeName);
6065
if (nativeClass != nil) {
6166
mdClassesByPointer[nativeClass] = originalOffset;
6267
}
@@ -406,9 +411,16 @@ napi_value toJS(napi_env env) {
406411
} else {
407412
auto nameOffset = bridgeState->metadata->getOffset(offset);
408413
offset += sizeof(MDSectionOffset);
414+
auto runtimeNameOffset = bridgeState->metadata->getOffset(offset);
415+
offset += sizeof(MDSectionOffset);
409416
bool hasProtocols = (nameOffset & mdSectionOffsetNext) != 0;
410417
nameOffset &= ~mdSectionOffsetNext;
411418
name = bridgeState->metadata->resolveString(nameOffset);
419+
const char* runtimeName = name.c_str();
420+
if (runtimeNameOffset != MD_SECTION_OFFSET_NULL) {
421+
runtimeName = bridgeState->metadata->resolveString(runtimeNameOffset);
422+
}
423+
nativeClass = objc_getClass(runtimeName);
412424
while (hasProtocols) {
413425
auto protocolOffset = bridgeState->metadata->getOffset(offset);
414426
offset += sizeof(MDSectionOffset);
@@ -420,7 +432,6 @@ napi_value toJS(napi_env env) {
420432
hasMembers = (superClassOffset & mdSectionOffsetNext) != 0;
421433
superClassOffset &= ~mdSectionOffsetNext;
422434
offset += sizeof(MDSectionOffset);
423-
nativeClass = objc_getClass(name.c_str());
424435
}
425436

426437
napi_value constructor, prototype;

NativeScript/ffi/ClassMember.mm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ inline id assertSelf(napi_env env, napi_value jsThis) {
318318
}
319319
}
320320

321+
// NSLog(@"objcNativeCall: %p, %@", self, NSStringFromSelector(method->methodOrGetter.selector));
322+
321323
if (!objcNativeCall(env, cif, self, avalues, rvalue)) {
322324
return nullptr;
323325
}

NativeScript/ffi/NativeScriptException.mm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
this->fullMessage_ = GetFullMessage(env, error, this->message_);
3737
this->name_ = name;
3838
napi_set_named_property(env, error, "name", napi_util::to_js_string(env, name));
39+
NSLog(@"NativeScriptException::NativeScriptException: %s", this->fullMessage_.c_str());
3940
}
4041

4142
std::string NativeScriptException::Description() const {

build_nativescript.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ function cmake_build () {
8686

8787
for arch in x86_64 arm64; do
8888

89-
METADATA_SIZE=$(($METADATA_SIZE > $(stat -f%z "./metadata-generator/metadata.$platform.$arch.nsmd") ? $METADATA_SIZE : $(stat -f%z "./metadata-generator/metadata.$platform.$arch.nsmd")))
89+
METADATA_SIZE=$(($METADATA_SIZE > $(stat -f%z "./metadata-generator/metadata/metadata.$platform.$arch.nsmd") ? $METADATA_SIZE : $(stat -f%z "./metadata-generator/metadata.$platform.$arch.nsmd")))
9090

9191
done
9292

metadata-generator/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ target_link_libraries(
7777
clang
7878
)
7979

80+
# Set runtime path for libclang
81+
set_target_properties(${NAME} PROPERTIES
82+
BUILD_WITH_INSTALL_RPATH TRUE
83+
INSTALL_RPATH "/Library/Developer/CommandLineTools/usr/lib"
84+
)
85+
8086
install(TARGETS ${NAME}
8187
RUNTIME DESTINATION bin)
8288

metadata-generator/deno.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

metadata-generator/include/IR.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ class ClassDecl {
250250
std::string framework;
251251

252252
std::string name;
253+
std::string runtimeName;
253254
std::string superClassName;
254255
std::vector<std::string> protocolNames;
255256

metadata-generator/include/MetadataWriter.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ struct MDProtocol {
105105

106106
struct MDClass {
107107
MDSectionOffset name;
108+
MDSectionOffset runtimeName;
108109
std::vector<MDSectionOffset> protocols;
109110
MDSectionOffset superclass;
110111
std::vector<MDMember *> members;
@@ -242,7 +243,7 @@ class MDSection : public std::unordered_map<MDSectionOffset, T> {
242243
if (stringToKey.contains(strKey)) {
243244
return stringToKey[strKey];
244245
}
245-
MDSectionOffset key = section_offset;
246+
MDSectionOffset key = (MDSectionOffset)section_offset;
246247
size_t valueSize = serde.size(value);
247248
section_offset += valueSize;
248249
section_size += valueSize;

0 commit comments

Comments
 (0)