Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot build or run on Big Sur #110

Open
nanoscopic opened this issue Dec 12, 2020 · 5 comments
Open

Cannot build or run on Big Sur #110

nanoscopic opened this issue Dec 12, 2020 · 5 comments

Comments

@nanoscopic
Copy link

This repo cannot be built or run on Big Sur.

It cannot be built due to changes in how CoreFoundation and IOKit frameworks are used.
They are no longer linked directly according to what I'm reading and dlopen must be used.
There is also an error linking the "System" library.

I tried running the latest release and that doesn't work either.

Example output trying to just list devices:

user@users-Mac-mini ios % ./iOSConsole -l
Currently connected devices: (1)
SDMMD__CreateDataFromFileContents: Could not lstat.
SDMMD__CreateDictFromFileContents: Could not read from file.
SDMMD__CreateDataFromFileContents: Could not lstat.
SDMMD__CreateDictFromFileContents: Could not read from file.
1) [my device udid] : B (Invalid) (USB)

Trying to do anything with my device does not work.

@fbartho
Copy link

fbartho commented Jan 17, 2021

I cloned this repo then:
git submodule init && git submodule update

Then of the targets in the Makefile core, static, openssl, iosconsole all built fine.

Issue 1:

(Not matching what @nanoscopic posted above!)

$ ./build/iOSConsole -l
Currently connected devices: (0)

Note: unfortunately this is wrong -- as I do have a device connected, and the System Console is indeed running / displaying console logs from my device

Issue 2

Unfortunately, make framework fail to link with the following error:

# [output snipped]
xcrun libtool -dynamic -lssl -lcrypto -framework CoreFoundation -lSystem -framework IOKit -lCore -Lbuild/ ./Framework/src/SDMMD_AFCConnection_Class.o ./Framework/src/SDMMD_AFCOperation_Class.o ./Framework/src/SDMMD_AFC_Types.o ./Framework/src/SDMMD_AMAuthInstall.o ./Framework/src/SDMMD_AMAuthInstallApImg3.o ./Framework/src/SDMMD_AMAuthInstallApImg4.o ./Framework/src/SDMMD_AMAuthInstallMonet.o ./Framework/src/SDMMD_AMDevice.o ./Framework/src/SDMMD_AMDevice_Class.o ./Framework/src/SDMMD_AppleFileConduit.o ./Framework/src/SDMMD_Applications.o ./Framework/src/SDMMD_Connection.o ./Framework/src/SDMMD_Connection_Class.o ./Framework/src/SDMMD_Debugger.o ./Framework/src/SDMMD_Error.o ./Framework/src/SDMMD_FileRelay.o ./Framework/src/SDMMD_Functions.o ./Framework/src/SDMMD_Initialize.o ./Framework/src/SDMMD_MCP.o ./Framework/src/SDMMD_MCP_Class.o ./Framework/src/SDMMD_MDFUModeDevice.o ./Framework/src/SDMMD_MRUSBDevice.o ./Framework/src/SDMMD_MRecoveryModeDevice.o ./Framework/src/SDMMD_MRestorableDevice.o ./Framework/src/SDMMD_MRestoreModeDevice.o ./Framework/src/SDMMD_MobileBackup2.o ./Framework/src/SDMMD_Notification.o ./Framework/src/SDMMD_SSL_Functions.o ./Framework/src/SDMMD_Service.o ./Framework/src/SDMMD_USBMuxListener.o ./Framework/src/SDMMD_USBMuxListener_Class.o ./Framework/src/SDMMD_USBMuxListener_Types.o ./Framework/src/SDMMD_USBMux_Protocol.o -o build/libSDMMobileDevice.dylib
ld: framework not found CoreFoundation
fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: internal link edit command failed
make: *** [framework] Error 1

Browsing the internet does indeed suggest that at least during the beta-time, that Big Sur had hidden the Filesystem representations of those libraries, such that dlopen was required.

I'm beyond shocked that that might be the case though. If there's an easy way to do this, I would try to build this using an Xcode project, and see if Xcode knows how to link CoreFoundation the framework -- maybe the paths / discovery technique have to be updated from the old manner?

@samdmarshall
Copy link
Owner

There has to be a way outside of an Xcode project file to link against system libraries, if there is a problem with the makefile it is that i'm using the default search paths provided by the linker, which, seems like should just work.

@fbartho
Copy link

fbartho commented Jan 17, 2021

@samdmarshall -- I totally agree, I just wonder if there's some stupid flag we have to use that Xcode knows about. -- Like hypothetically a flag that tells the linker what "default" search path to use and that the current default no longer contains CoreFoundation.

@zorgiepoo
Copy link

A sample dylib project in Xcode invokes clang -dynamiclib which appears to work here I think (instead of libtool -dynamic; maybe it didn't get updated or something)

@samdmarshall
Copy link
Owner

invoking clang means you are using the driver, not the actual linker tool, so i assume this means there is some new flag or combination of flags it wants to be used.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants