0

I am building a macOS app with an '.Framework' inside it. The '.Framework' is built using the 'Mono.framework'.

I have to bundle the necessary .dyLibs and DLLs in the app before deploying the it to the user's machine.

I am using this script in Xcode to bundle the libs. This script seems to do my job partially.


    # Version and locations
    MONO_VERSION=6.12.0
    MONO_LOCATION=/Library/Frameworks/Mono.Framework/Versions/$MONO_VERSION
    LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}"
    BIN_LOCATION="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_FOLDER_PATH}"
    RES_LOCATION="${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Resources/Resources/Managed"
    
    set -x
    
    # Copy needed files
    cp $MONO_LOCATION/lib/libmonosgen-2.0.1.dylib "${LOCATION}"
    cp $MONO_LOCATION/lib/libsqlite3.0.dylib "${LOCATION}"
    cp $MONO_LOCATION/lib/libmono-native-compat.0.dylib "${LOCATION}"
    mkdir -p "${RES_LOCATION}/etc/mono"
    cp -R $MONO_LOCATION/etc/mono "${RES_LOCATION}/etc"
    sed 's/$mono_libdir\///g' $MONO_LOCATION/etc/mono/config > "${RES_LOCATION}/etc/mono/config"
    
    # Copy system assemblies needed
    mkdir -p "${RES_LOCATION}/mono/4.5"
    cp $MONO_LOCATION/lib/mono/4.5/mscorlib.dll "${RES_LOCATION}/mono/4.5"
    cp $MONO_LOCATION/lib/mono/4.5/Facades/netstandard.dll "${RES_LOCATION}"
    cp $MONO_LOCATION/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll "${RES_LOCATION}"
    cp $MONO_LOCATION/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll "${RES_LOCATION}"
    cp $MONO_LOCATION/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll "${RES_LOCATION}"
    cp $MONO_LOCATION/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll "${RES_LOCATION}"
    
    # Change runtime paths
    install_name_tool -change /Library/Frameworks/Mono.framework/Versions/$MONO_VERSION/lib/libmonosgen-2.0.1.dylib @rpath/libmonosgen-2.0.1.dylib  "${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}/ConnectionCheckerLibrary.framework/ConnectionCheckerLibrary"
    
    install_name_tool -change /Library/Frameworks/Mono.framework/Versions/$MONO_VERSION/lib/libsqlite3.0.dylib @rpath/libsqlite3.0.dylib "${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}/ConnectionCheckerLibrary.framework/ConnectionCheckerLibrary"

I am still getting the error

The assembly mscorlib.dll was not found or could not be loaded. It should have been installed in the /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.5/mscorlib.dll' directory

I am not sure why the 'mscorlib.dll' path is not being set.

I am not sure if I have to use mkbundle for this. This is the first time I am using the Embeddinator - 4000/Mono to build my apps. Any sort of help is appreciated.

iBuilt
  • 181
  • 1
  • 1
  • 9

0 Answers0