Код: Выделить всё
OBJC_EXTERN void ios_prepare_request(const char *url);
< /code>
Определение: < /pbr />
#define EXPORT __attribute__((visibility("default"), used))
extern "C" {
EXPORT void ios_prepare_request(const char *url) {
NSString *urlString = [NSString stringWithUTF8String:url];
// global variable in my library
request =
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
}
< /code>
This Dylib использует функции C, которые я определил. На Android это работает правильно через cmakelists.txt
Код: Выделить всё
set_target_properties(sdk PROPERTIES
IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libsdk.so
IMPORTED_NO_SONAME ON)
< /code>
Но на iOS это просто не удается во время выполнения. Нет конкретной ошибки, просто Exc_bad_access
вещи, которые я пробовал, но не работаю: < /p>
Настройка .podspec < /code> Добавить флаги линкера, ни один из них не работал.
Код: Выделить всё
s.pod_target_xcconfig = {
'OTHER_LDFLAGS' => '-Wl,-export_dynamic -rdynamic',
'GCC_SYMBOLS_PRIVATE_EXTERN' => 'NO'
}
s.user_target_xcconfig = {
'OTHER_LDFLAGS' => '-Wl,-export_dynamic -rdynamic'
}
Код: Выделить всё
// First, load the main executable to make its symbols available
void *main_handle = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);
if (!main_handle) {
NSString *errorMessage = [NSString stringWithUTF8String:dlerror()];
*error =
[NSError errorWithDomain:@"OpacitySDKMainError"
code:1003
userInfo:@{NSLocalizedDescriptionKey : errorMessage}];
return -1;
}
// Explicitly resolve and verify our iOS function symbols are available
void *prepare_request_fn = dlsym(RTLD_DEFAULT, "ios_prepare_request");
// THIS FAILS, dlsym returns null
if (!prepare_request_fn) {
NSString *errorMessage = @"Failed to resolve iOS helper function symbols";
*error =
[NSError errorWithDomain:@"OpacitySDKSymbolError"
code:1004
userInfo:@{NSLocalizedDescriptionKey : errorMessage}];
return -1;
}
NSBundle *dylib_bundle =
[NSBundle bundleWithIdentifier:@"com.opacitylabs.sdk"];
NSString *dylib_path = [dylib_bundle pathForResource:@"sdk" ofType:@""];
// Load the dynamic library
void *handle = dlopen([dylib_path UTF8String], RTLD_LAZY | RTLD_GLOBAL);
if (!handle) {
NSString *errorMessage = [NSString stringWithUTF8String:dlerror()];
*error =
[NSError errorWithDomain:@"OpacitySDKDylibError"
code:1002
userInfo:@{NSLocalizedDescriptionKey : errorMessage}];
return -1; // or appropriate error code
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -functions