IronSource SDK native extension

@marat.giliazov Did you notice any issue with your library since the build server got updated with iOS 14.5?

We can probably assist in your investigations soon, but we are both tied up with other tasks at this moment.

1 Like

Any possibility this could be looked up this week? Let me know so I can estimate with my team. (Of course I understand you have higher priorities).

Yes, tomorrow or Wednesday. But with no guarantee of a solution!

1 Like

Great!! :grinning:
No such thing as guaranteed solution in developer’s world :joy:

Hi @Lex !
I can offer you a workaround (as I’ve done in my project). You can make prebuilt dynamic framework in XCode with all necessary ad network inside. If you target prebuilt framework to iOS <14.5 you don’t have dependency to AVFAudio and you can run game on older devices.
Drop these dynamic framework inside ironsource extension to lib/ios and to res/ios/Frameworks.
Add in ext.manifest linkFlags: [’-Wl,-rpath,@executable_path/Frameworks’].

3 Likes

Thanks for the help!
Can you a bit more specific on how you make this prebuilt dynamic framework with Xcode? I’m not too familiar with Xcode. I added IronSource to the project and build correctly, but I’m not sure where to find the good files to put into lib/ios
Also, what’s the value of the “@executable_path” parameter that you put in the manifest?

edit: it does confirm the diagnostic made by @Mathias_Westerdahl stating the issue arises from the iOS 14.5 update on server side

I’ve looked into the issue but not found a solution yet. I started by updating to the latest version, and it worked well on Android, but same behaviour on iOS - an instant shutdown off the app.

Next step is to try and attach to a debugger and see what happens.

1 Like

@executable_path points to location where application is installed. Framewroks folder is packed inside application bundle and contains our dynamic framework. During startup application wants to load dynamic framework and need to know where is it located. So -rpath linker option add necessary path.

In XCode I created new project, choose ‘Framework’. After add all libraries I need inside (Ironsource and other ads network sdks), turn off ‘Bitcode option’ in project settings (because I got error about bitcode support from iTunes when first time upload application). Also change build configuration for Run stage (‘Edit Scheme’), hit Product->Build. When build is done find folder Products in Project tree, right click on result framework → Show in Finder. Copy it and drop inside lib/ios.

3 Likes

@ekharkunov thanks for your answer. However when I try to build the framework project in Xcode I get this error
image

Did you encounter it?

Choose ‘Any iOS Devices (arm64, armv7)’ as target here

2 Likes

Hmm it fails with the same error.
What value do you have for this?

I’ve added Ironsource via cocoapods (because I need some other sdks). That’s why it look so

1 Like

Sorry to be so asking, but I struggle a lot with Xcode.

Here is my pod file:

# Uncomment the next line to define a global platform for your project
platform :ios, '14.3'

target 'irontest' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  pod 'IronSourceSDK','7.1.9.0'

  # Pods for irontest

end

When I try to build the project I get the following error:

ld: warning: directory not found for option '-F/Users/alex/Desktop/irontest/IronSource'
ld: warning: directory not found for option '-F/Users/alex/Desktop/irontest/irontest/IronSource'
ld: framework not found Pods_irontest
clang: error: linker command failed with exit code 1 (use -v to see invocation)

What am I doing wrong? Btw if someone is willing to spend some freelance time and make this ironSource SDK work on iOS, please PM me.

If I recall correctly, after using the cocoapods to sync the dependencies, one sould open the new generated Xcode project, not the original one. I often make that mistake, and I end up with an error (not sure if it’s the same error though)

I’m using the generated .xcodeproj file but I still get this error.

1 Like

Did you manage to make any progress on your investigation? Do you see any resolution possible server-side?

The solution is for us to set up a separate macOS environment for building iOS and OSX builds. It is quite expensive but it’s the only reasonable solution for us at this point. We will start this process next week.

Note: We’ve had this kind of setup in the past so we just need to reactivate it and confirm that things are still working like last time.

1 Like

OK, noted, thanks for the feedback!

Thanks to @ekharkunov 's help, I managed to make it work on a standalone project (Yay! I thought I was done with it).
And yet, when I integrate it with my real project. I crashes at the beginning, this time it’s a different kind of crash

Incident Identifier: 06FF7D00-08C8-4D80-B574-C35DE50782DB
CrashReporter Key:   b9d76e9430febb35d9b285f3cb47e7b9b32c8e0a
Hardware Model:      iPhone8,1
Process:             MobblesCards [18462]
Path:                /private/var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/MobblesCards
Identifier:          com.test.cards
Version:             0.10.40 (0.10.40)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.test.card [491]


Date/Time:           2021-09-02 17:25:54.4513 +0200
Launch Time:         2021-09-02 17:25:54.4111 +0200
OS Version:          iPhone OS 14.6 (18F72)
Release Type:        User
Baseband Version:    8.71.01
Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Application Specific Information:
abort() called

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib        	0x00000001d40597b0 __pthread_kill + 8
1   libsystem_pthread.dylib       	0x00000001f07d49c0 pthread_kill + 212
2   libsystem_c.dylib             	0x00000001b0ed3a44 abort + 100
3   libswiftCore.dylib            	0x0000000103d08028 0x103a84000 + 2637864
4   libswiftCore.dylib            	0x0000000103d001c8 0x103a84000 + 2605512
5   libdyld.dylib                 	0x00000001a7f1509c invocation function for block in dyld3::AllImages::runAllInitializersInImage+ 65692 (dyld3::closure::Image const*, dyld3::MachOLoaded const*) + 136
6   libdyld.dylib                 	0x00000001a7f072d8 dyld3::closure::Image::forEachInitializer(void const*, void + 8920 (void const*) block_pointer) const + 96
7   libdyld.dylib                 	0x00000001a7f14ef8 invocation function for block in dyld3::AllImages::runInitialzersBottomUp+ 65272 (dyld3::closure::Image const*) + 296
8   libdyld.dylib                 	0x00000001a7f07b94 dyld3::closure::Image::forEachImageToInitBefore(void + 11156 (unsigned int, bool&) block_pointer) const + 92
9   libdyld.dylib                 	0x00000001a7f14980 dyld3::AllImages::runStartupInitialzers+ 63872 () + 248
10  libdyld.dylib                 	0x00000001a7f31d18 dyld3::entry_runInitialzersBottomUp+ 183576 (mach_header const*) + 28
11  dyld                          	0x0000000102e896ec dyld::launchWithClosure+ 38636 (dyld3::closure::LaunchClosure const*, DyldSharedCache const*, dyld3::MachOLoaded const*, unsigned long, int, char const**, char const**, char const**, Diagnostics&, unsigned long*, unsigned long*, bool*, bool*) + 1436
12  dyld                          	0x0000000102e87488 dyld::_main+ 29832 (macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 3624
13  dyld                          	0x0000000102e81208 dyldbootstrap::start+ 4616 (dyld3::MachOLoaded const*, int, char const**, dyld3::MachOLoaded const*, unsigned long*) + 396
14  dyld                          	0x0000000102e81038 _dyld_start + 56

Thread 1:
0   libsystem_pthread.dylib       	0x00000001f07d8864 start_wqthread + 0

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000000   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x0000000000000000
    x4: 0x0000000102d6b080   x5: 0x0000000000000020   x6: 0x0049000004210143   x7: 0x000000000000003e
    x8: 0x0000000102f27880   x9: 0x9281d3c64f137272  x10: 0x0000000000000002  x11: 0x0000000000000001
   x12: 0x0000000000000000  x13: 0x7270206e6f697372  x14: 0x31206f7420726f69  x15: 0x000a2e302e322e32
   x16: 0x0000000000000148  x17: 0x0000000000000001  x18: 0x0000000000000000  x19: 0x0000000000000006
   x20: 0x0000000000000103  x21: 0x0000000102f27960  x22: 0x0000000000000005  x23: 0x0000000103a84000
   x24: 0x0000000102b067e8  x25: 0x00000001a7f149e8  x26: 0x0000000201308f60  x27: 0x00000001a7f14dd0
   x28: 0x0000000201308ff0   fp: 0x000000016dde44e0   lr: 0x00000001f07d49c0
    sp: 0x000000016dde44c0   pc: 0x00000001d40597b0 cpsr: 0x40000000
   esr: 0x56000080  Address size fault

Binary Images:
0x102018000 - 0x102507fff MobblesCards arm64  <6e78679604d1380dbae4902c63adb8ba> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/MobblesCards
0x102b34000 - 0x102b3bfff libswiftObjectiveC.dylib arm64  <1180ac100a9239db84972b6d4217b8eb> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/Frameworks/libswiftObjectiveC.dylib
0x102b5c000 - 0x102b6bfff libswiftCoreGraphics.dylib arm64  <dc548ef900f93a15b5db05e39d9b5c5b> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/Frameworks/libswiftCoreGraphics.dylib
0x102bd8000 - 0x102bdffff libswiftCoreFoundation.dylib arm64  <25114ae14ae93dbcb3de7f9f9a5b45d2> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/Frameworks/libswiftCoreFoundation.dylib
0x102bf0000 - 0x102bfbfff libswiftDarwin.dylib arm64  <999c29678a063cd582d7d156e9440a0c> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/Frameworks/libswiftDarwin.dylib
0x102c34000 - 0x102c4ffff libswiftDispatch.dylib arm64  <9fcba8edd8fd3c1697405e2a31f3e959> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/Frameworks/libswiftDispatch.dylib
0x102db8000 - 0x102dc3fff libobjc-trampolines.dylib arm64  <65269ec65e0437b7ab08b56b817dee19> /usr/lib/libobjc-trampolines.dylib
0x102e80000 - 0x102eebfff dyld arm64  <c5d2aaed4aeb3e18a5d2c8b681a2d6eb> /usr/lib/dyld
0x102f6c000 - 0x103557fff IronSource arm64  <9b56bc18cad23571b955e80ad9d8ee2e> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/Frameworks/IronSource.framework/IronSource
0x103a84000 - 0x103da3fff libswiftCore.dylib arm64  <ad0cad3b1b51332786448be1ff1f0ae9> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/Frameworks/libswiftCore.dylib
0x1050cc000 - 0x105247fff libswiftFoundation.dylib arm64  <9702769f1f063001ab755ad38e1f7d66> /var/containers/Bundle/Application/7FEE809B-E6DA-4E59-B401-10EE02618201/MobblesCards.app/Frameworks/libswiftFoundation.dylib
0x1a7e86000 - 0x1a7f04fff libdispatch.dylib arm64  <3bbe17ac597b3b7991ac21a5523e7bd7> /usr/lib/system/libdispatch.dylib
0x1a7f05000 - 0x1a7f3bfff libdyld.dylib arm64  <5fffb96439d63ccfbd34c6ca4a148d1a> /usr/lib/system/libdyld.dylib
0x1a7f3c000 - 0x1a8193fff libicucore.A.dylib arm64  <bbfcb70e67f33efd9a4de17286e33628> /usr/lib/libicucore.A.dylib
0x1a8194000 - 0x1a853ffff CoreFoundation arm64  <4d6dd6dd22e438589a0c3cb77c2f13d6> /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
...

EOF

The settings are the same. Only the dependencies are different:
dependencies#0 = https://github.com/rgrams/rendercam/archive/1.0.3.zip
dependencies#1 = https://github.com/britzl/defold-input/archive/2.10.0.zip
dependencies#2 = https://github.com/subsoap/defsave/archive/v1.2.1.zip
dependencies#3 = https://github.com/selimanac/defold-random/archive/master.zip
dependencies#4 = https://github.com/AGulev/set_screen_position/archive/master.zip
dependencies#5 = https://github.com/defold/extension-iap/archive/refs/tags/3.1.1.zip
dependencies#6 = https://github.com/GameAnalytics/GA-SDK-DEFOLD/archive/3.3.10.zip
dependencies#7 = https://github.com/GameAnalytics/defold-openssl/archive/master.zip
dependencies#8 = https://github.com/heroiclabs/nakama-defold/archive/2.0.0.zip
dependencies#9 = https://github.com/defold/extension-websocket/archive/refs/tags/3.0.0.zip
dependencies#10 = https://github.com/defold/extension-facebook/archive/refs/tags/6.2.1.zip
dependencies#11 = https://github.com/britzl/gooey/archive/9.1.1.zip
dependencies#12 = https://github.com/defold/extension-push/archive/3.0.2.zip
dependencies#13 = https://github.com/defold/extension-review/archive/3.0.1.zip
dependencies#14 = https://github.com/defold/extension-gpgs/archive/refs/tags/2.3.0.zip
dependencies#15 = https://github.com/subsoap/defos/archive/v2.5.0.zip
dependencies#16 = https://github.com/defold/extension-iac/archive/master.zip
dependencies#17 = https://github.com/Insality/druid/archive/refs/tags/0.6.0.zip
dependencies#18 = https://github.com/britzl/defold-lfs/archive/master.zip
dependencies#19 = https://github.com/defold/extension-firebase/archive/refs/tags/1.1.3.zip
dependencies#20 = https://github.com/defold/extension-firebase-analytics/archive/refs/tags/2.1.0.zip
dependencies#21 = https://github.com/selimanac/defold-random/archive/master.zip
dependencies#22 = https://github.com/defold/extension-adinfo/archive/master.zip

Could it come from one of those dependencies??

I’m pulling my hair to make this SDK work…

Do you run sample project with only ironsource dependency?