Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

You can't use dynamic libraries on iOS because they fail iTunes Connect validation. The only dylibs it allows are the Swift standard library. You can, however, use clang to take a static library and throw it into anything you want (framework, dylib, executable).


It looks like you're right, Apple says you can't bundle dylibs outside of a Framework on iOS :\

What would be the difference though, why make the distinction?

> Dynamic libraries outside of a framework bundle, which typically have the file extension .dylib, are not supported on iOS, watchOS, or tvOS, except for the system Swift libraries provided by Xcode.

https://developer.apple.com/library/content/technotes/tn2435...


From my understanding, the limitation is purely because of how Apple designed iTunes Connect validation, and not for technical reasons.


That's not true at all. You can use dynamic libraries; Swift modules produce .framework packages, which are dynamically linked.


I meant dylib files. You can't ship those, but you can ship dynamically linked frameworks.


AFAIK the only difference between a dylib and a framework is the folder structure (and I guess the install path of the library). So in theory you could produce a cdylib, create a framework folder structure for it, and then use install_name_tool to update the install name appropriately.


That's what I thought, too, but I was reminded of the filetype field in the mach_header which has distinct MH_DYLIB and MH_BUNDLE values. fwiw, I don't think that difference means much for the loading process, but they are different.


Hmm. I just ran `otool -hv /System/Library/Frameworks/Foundation.framework/Foundation` and it says the "filetype" header has the value "DYLIB". It looks like MH_BUNDLE is actually for plugin bundles, not for frameworks.


Oh, I see! That makes sense. Preference bundles are type "BUNDLE" but frameworks are not. TIL.


Ah, I see. Thanks for the clarification.


If you can avoid using a dylib on iOS, I would do it. It effects startup performance time. Just make a static version and compile it into the binary?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: