diff options
author | Jon Nermut <jon.nermut@gmail.com> | 2018-01-24 22:00:52 +1100 |
---|---|---|
committer | jan iversen <jani@libreoffice.org> | 2018-01-30 08:51:39 +0100 |
commit | 671e67dfc24205a133dbbaf87bc7be9f3af56b3a (patch) | |
tree | 652e745616226a5ca04584094ed5c220cddd6574 /ios | |
parent | fd7ca0db5c2d5d1580d76c9536828a024543ea53 (diff) |
iOS: linker changes for on device
[ae490dd] iOS: add script to sym link the dylib to the right spot
Adds a shell script to symlink the right dylib into the build products folder,
which means we can reference libKit.dylib relative to that, rather than absolutely
[ba4c072] iOS: pass in user path
On device using appPath/user as the user directory causes a crash, as an app cannot write inside it's bundle. Instead, add a new param to pass the documents dir into the init.
[088ad49] iOS: linker changes to run on device
Change-Id: I16f5d85f3ca483df11b82108ee39c4ec461214f4
Reviewed-on: https://gerrit.libreoffice.org/48866
Reviewed-by: jan iversen <jani@libreoffice.org>
Tested-by: jan iversen <jani@libreoffice.org>
Diffstat (limited to 'ios')
-rw-r--r-- | ios/CustomTarget_iOS_link.mk | 1 | ||||
-rw-r--r-- | ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj | 49 | ||||
-rw-r--r-- | ios/LibreOfficeLight/LibreOfficeLight/LOKit/LibreOfficeKitWrapper.swift | 5 | ||||
-rw-r--r-- | ios/source/LibreOfficeKit.c | 7 | ||||
-rw-r--r-- | ios/source/LibreOfficeKit.h | 2 |
5 files changed, 49 insertions, 15 deletions
diff --git a/ios/CustomTarget_iOS_link.mk b/ios/CustomTarget_iOS_link.mk index ab5ad721d8d7..ef6303a217d8 100644 --- a/ios/CustomTarget_iOS_link.mk +++ b/ios/CustomTarget_iOS_link.mk @@ -51,6 +51,7 @@ $(IOSKIT): $(IOSOBJ) $(IOSLIBS) $(gb_CC) -dynamiclib \ -Xlinker -rpath -Xlinker @executable_path/Frameworks \ -Xlinker -rpath -Xlinker @loader_path/Frameworks \ + -install_name @rpath/libKit.dylib \ -dead_strip \ -Xlinker -export_dynamic \ -Xlinker -no_deduplicate \ diff --git a/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj b/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj index 856d8b353bfb..4310b7862e3b 100644 --- a/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj +++ b/ios/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj @@ -13,7 +13,6 @@ 39022C211EDC2D0800100066 /* icudt60l.dat in Resources */ = {isa = PBXBuildFile; fileRef = 39022C201EDC2D0800100066 /* icudt60l.dat */; }; 39284DB31FA5F207006F43E4 /* DocumentActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39284DB21FA5F207006F43E4 /* DocumentActions.swift */; }; 392ED9B31E5E4B03005C8435 /* ViewPrintManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392ED9B21E5E4B03005C8435 /* ViewPrintManager.swift */; }; - 396C833F1FC9D89E008E662A /* libKit.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 396C833E1FC9D89D008E662A /* libKit.dylib */; }; 396F92F71E7AE62400A28C82 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 396F92F61E7AE62400A28C82 /* Settings.bundle */; }; 397868D61E59A3EA007F9248 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 397868D81E59A3EA007F9248 /* LaunchScreen.xib */; }; 397E08FE1E597BD8001374E0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 397E08FD1E597BD8001374E0 /* AppDelegate.swift */; }; @@ -42,8 +41,24 @@ FCC2E4012004B65E00CEB504 /* example.odt in Resources */ = {isa = PBXBuildFile; fileRef = FCC2E4002004B65E00CEB504 /* example.odt */; }; FCC2E4032004B72700CEB504 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC2E4022004B72700CEB504 /* Util.swift */; }; FCC2E4052004B74000CEB504 /* AsyncUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC2E4042004B74000CEB504 /* AsyncUtil.swift */; }; + FCC7651D201C7F8A007D190C /* libKit.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FCC7651C201C7F8A007D190C /* libKit.dylib */; }; + FCC7651E201C80A5007D190C /* libKit.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = FCC7651C201C7F8A007D190C /* libKit.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; /* End PBXBuildFile section */ +/* Begin PBXCopyFilesBuildPhase section */ + FC148CE420187F7800C349CA /* Embed Libraries */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + FCC7651E201C80A5007D190C /* libKit.dylib in Embed Libraries */, + ); + name = "Embed Libraries"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 39022C1A1EDC2A0E00100066 /* program */ = {isa = PBXFileReference; lastKnownFileType = folder; name = program; path = ../generated/resources/program; sourceTree = "<group>"; }; 39022C1C1EDC2A2C00100066 /* services */ = {isa = PBXFileReference; lastKnownFileType = folder; name = services; path = ../generated/resources/services; sourceTree = "<group>"; }; @@ -52,7 +67,6 @@ 39284DB21FA5F207006F43E4 /* DocumentActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentActions.swift; sourceTree = "<group>"; }; 392ED9B21E5E4B03005C8435 /* ViewPrintManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewPrintManager.swift; path = LibreOfficeLight/ViewPrintManager.swift; sourceTree = SOURCE_ROOT; }; 39503A6F1F94C4AC00F19C78 /* lokit-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "lokit-Bridging-Header.h"; sourceTree = "<group>"; }; - 396C833E1FC9D89D008E662A /* libKit.dylib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libKit.dylib; path = ../generated/simulator/libKit.dylib; sourceTree = "<group>"; }; 396F92F61E7AE62400A28C82 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; }; 397275391E77D9F1006ACDCC /* LibreOfficeLight.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = LibreOfficeLight.entitlements; sourceTree = "<group>"; }; 397868D71E59A3EA007F9248 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/LaunchScreen.xib; sourceTree = "<group>"; }; @@ -85,6 +99,7 @@ FCC2E4002004B65E00CEB504 /* example.odt */ = {isa = PBXFileReference; lastKnownFileType = file; name = example.odt; path = "../../android/default-document/example.odt"; sourceTree = "<group>"; }; FCC2E4022004B72700CEB504 /* Util.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Util.swift; sourceTree = "<group>"; }; FCC2E4042004B74000CEB504 /* AsyncUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncUtil.swift; sourceTree = "<group>"; }; + FCC7651C201C7F8A007D190C /* libKit.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libKit.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -92,7 +107,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 396C833F1FC9D89E008E662A /* libKit.dylib in Frameworks */, + FCC7651D201C7F8A007D190C /* libKit.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -122,7 +137,7 @@ 3972753A1E77D9F7006ACDCC /* Frameworks */ = { isa = PBXGroup; children = ( - 396C833E1FC9D89D008E662A /* libKit.dylib */, + FCC7651C201C7F8A007D190C /* libKit.dylib */, ); name = Frameworks; sourceTree = "<group>"; @@ -209,9 +224,11 @@ isa = PBXNativeTarget; buildConfigurationList = 397E09251E597BD8001374E0 /* Build configuration list for PBXNativeTarget "LibreOfficeLight" */; buildPhases = ( + FC148D13201C7A6600C349CA /* ShellScript */, 397E08F61E597BD8001374E0 /* Sources */, 397E08F71E597BD8001374E0 /* Frameworks */, 397E08F81E597BD8001374E0 /* Resources */, + FC148CE420187F7800C349CA /* Embed Libraries */, ); buildRules = ( ); @@ -295,6 +312,22 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + FC148D13201C7A6600C349CA /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/bash; + shellScript = "echo hello\n\nGEN=$PROJECT_DIR/../generated\necho $arch\nif [ $arch = \"x86_64\" ]; then\nLIB=$GEN/simulator/libKit.dylib\nelse\nLIB=$GEN/release/libKit.dylib\nfi\necho $LIB\nln -sf $LIB $TARGET_BUILD_DIR/libKit.dylib\n\n\n\n\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 397E08F61E597BD8001374E0 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -395,7 +428,7 @@ HEADER_SEARCH_PATHS = "$(inherited)"; IPHONEOS_DEPLOYMENT_TARGET = 11.2; LD_MAP_FILE_PATH = ""; - LIBRARY_SEARCH_PATHS = $PROJECT_DIR/../generated/; + LIBRARY_SEARCH_PATHS = "$PROJECT_DIR/../generated/debug/**"; MACH_O_TYPE = mh_execute; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; @@ -457,11 +490,11 @@ HEADER_SEARCH_PATHS = "$(inherited)"; IPHONEOS_DEPLOYMENT_TARGET = 11.2; LD_MAP_FILE_PATH = ""; - LIBRARY_SEARCH_PATHS = $PROJECT_DIR/../generated/; + LIBRARY_SEARCH_PATHS = "$PROJECT_DIR/../generated/release/**"; MACH_O_TYPE = mh_execute; MTL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = libKit_ARM64.a; + OTHER_LDFLAGS = ""; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "lokit-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -591,7 +624,7 @@ HEADER_SEARCH_PATHS = "$(inherited)"; IPHONEOS_DEPLOYMENT_TARGET = 11.2; LD_MAP_FILE_PATH = ""; - LIBRARY_SEARCH_PATHS = $PROJECT_DIR/../generated/; + LIBRARY_SEARCH_PATHS = "$PROJECT_DIR/../generated/simulator/**"; MACH_O_TYPE = mh_execute; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; diff --git a/ios/LibreOfficeLight/LibreOfficeLight/LOKit/LibreOfficeKitWrapper.swift b/ios/LibreOfficeLight/LibreOfficeLight/LOKit/LibreOfficeKitWrapper.swift index 8fff510bbcc6..f096cd78ff74 100644 --- a/ios/LibreOfficeLight/LibreOfficeLight/LOKit/LibreOfficeKitWrapper.swift +++ b/ios/LibreOfficeLight/LibreOfficeLight/LOKit/LibreOfficeKitWrapper.swift @@ -66,7 +66,10 @@ open class LibreOffice { let b = Bundle.init(for: LibreOffice.self) let path = b.bundlePath // not Bundle.main.bundlePath - BridgeLOkit_Init(path) + let docsDir = getDocumentsDirectory() + let userDir = docsDir.appendingPathComponent("user") + print("Calling BridgeLOkit_Init with \(path), \(userDir.path)" ) + BridgeLOkit_Init(path, userDir.path) let pLok = BridgeLOkit_getLOK() if let lokClass = pLok?.pointee.pClass?.pointee { diff --git a/ios/source/LibreOfficeKit.c b/ios/source/LibreOfficeKit.c index 1868ae7b21fa..55f56d212ab2 100644 --- a/ios/source/LibreOfficeKit.c +++ b/ios/source/LibreOfficeKit.c @@ -31,15 +31,12 @@ static double twipsPerXtile, twipsPerYtile; // Bridge functions to LibreOfficeKit __attribute__((visibility("default"))) -int BridgeLOkit_Init(const char *path) +int BridgeLOkit_Init(const char *appPath, const char *userPath) { - char bufUserPath[200]; - strcpy(bufUserPath, path); - strcpy(bufUserPath + strlen(path), "/user"); // Initialize LibreOfficeKit if (!kit) { - kit = lok_init_2(path, bufUserPath); + kit = lok_init_2(appPath, userPath); if (!kit) return 1; } diff --git a/ios/source/LibreOfficeKit.h b/ios/source/LibreOfficeKit.h index c4624371b347..abc4fe87a4ce 100644 --- a/ios/source/LibreOfficeKit.h +++ b/ios/source/LibreOfficeKit.h @@ -11,7 +11,7 @@ // The swift compiler uses this header to generate a needed interface // The functions (LibreOfficeKit.mm) calls functions directly in LibreOffice -int BridgeLOkit_Init(const char *path); +int BridgeLOkit_Init(const char *appPath, const char *userPath); int BridgeLOkit_Sizing(const int countXtiles, const int countYtiles, const int pixelsXtile, const int pixelsYtile); int BridgeLOkit_open(const char *path); |