summaryrefslogtreecommitdiff
path: root/xmake/rules/xcode/application
diff options
context:
space:
mode:
authorruki <[email protected]>2020-04-08 23:42:19 +0800
committerruki <[email protected]>2020-04-08 16:13:55 +0800
commitef120036428f173d235b1822a242173b12c7a6b8 (patch)
tree9e4729fdd9475dffae2175bfdb1da9b3831b4738 /xmake/rules/xcode/application
parent4c12e160c53b2566f9c80a86d9f7350aee4f62b3 (diff)
seperate storyboard and xcassets rules
Diffstat (limited to 'xmake/rules/xcode/application')
-rw-r--r--xmake/rules/xcode/application/build.lua4
-rw-r--r--xmake/rules/xcode/application/build_file.lua167
-rw-r--r--xmake/rules/xcode/application/install.lua2
-rw-r--r--xmake/rules/xcode/application/load.lua6
-rw-r--r--xmake/rules/xcode/application/uninstall.lua2
-rw-r--r--xmake/rules/xcode/application/xmake.lua9
6 files changed, 10 insertions, 180 deletions
diff --git a/xmake/rules/xcode/application/build.lua b/xmake/rules/xcode/application/build.lua
index dfe6fcfc2..c67ef8058 100644
--- a/xmake/rules/xcode/application/build.lua
+++ b/xmake/rules/xcode/application/build.lua
@@ -45,8 +45,8 @@ end
function main (target, opt)
-- get app and contents directory
- local appdir = path.absolute(target:data("xcode.app.rootdir"))
- local contentsdir = path.absolute(target:data("xcode.app.contentsdir"))
+ local appdir = path.absolute(target:data("xcode.bundle.rootdir"))
+ local contentsdir = path.absolute(target:data("xcode.bundle.contentsdir"))
-- need re-compile it?
local dependfile = target:dependfile(appdir)
diff --git a/xmake/rules/xcode/application/build_file.lua b/xmake/rules/xcode/application/build_file.lua
deleted file mode 100644
index 999dc8035..000000000
--- a/xmake/rules/xcode/application/build_file.lua
+++ /dev/null
@@ -1,167 +0,0 @@
---!A cross-platform build utility based on Lua
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--- Copyright (C) 2015-2020, TBOOX Open Source Group.
---
--- @author ruki
--- @file build_file.lua
---
-
--- imports
-import("core.base.option")
-import("core.theme.theme")
-import("core.project.depend")
-
--- build *.xcassets file
-function _build_xcassets_file(target, sourcefile, opt)
-
- -- get xcode sdk directory
- local xcode_sdkdir = assert(get_config("xcode"), "xcode not found!")
- local xcode_usrdir = path.join(xcode_sdkdir, "Contents", "Developer", "usr")
-
- -- get app resources directory
- local resourcesdir = target:data("xcode.app.resourcesdir")
-
- -- need re-compile it?
- local dependfile = target:dependfile(sourcefile)
- local dependinfo = option.get("rebuild") and {} or (depend.load(dependfile) or {})
- if not depend.is_changed(dependinfo, {lastmtime = os.mtime(dependfile)}) then
- return
- end
-
- -- trace progress info
- cprintf("${color.build.progress}" .. theme.get("text.build.progress_format") .. ":${clear} ", opt.progress)
- if option.get("verbose") then
- cprint("${dim color.build.object}compiling.xcode.xcassets %s", sourcefile)
- else
- cprint("${color.build.object}compiling.xcode.xcassets %s", sourcefile)
- end
-
- -- do compile
- local argv = {"--warnings", "--notices", "--output-format", "human-readable-text"}
- if is_plat("macosx") then
- table.insert(argv, "--target-device")
- table.insert(argv, "mac")
- table.insert(argv, "--platform")
- table.insert(argv, "macosx")
- elseif is_plat("iphoneos") then
- table.insert(argv, "--target-device")
- table.insert(argv, "iphone")
- table.insert(argv, "--target-device")
- table.insert(argv, "ipad")
- table.insert(argv, "--platform")
- table.insert(argv, "iphoneos")
- else
- assert("unknown device!")
- end
- table.insert(argv, "--minimum-deployment-target")
- table.insert(argv, get_config("target_minver"))
- table.insert(argv, "--app-icon")
- table.insert(argv, "AppIcon")
- if is_plat("iphoneos") then
- table.insert(argv, "--enable-on-demand-resources")
- table.insert(argv, "YES")
- table.insert(argv, "--compress-pngs")
- else
- table.insert(argv, "--enable-on-demand-resources")
- table.insert(argv, "NO")
- end
- table.insert(argv, "--development-region")
- table.insert(argv, "en")
- table.insert(argv, "--product-type")
- table.insert(argv, "com.apple.product-type.application")
- table.insert(argv, "--compile")
- table.insert(argv, resourcesdir)
- table.insert(argv, sourcefile)
- os.vrunv(path.join(xcode_usrdir, "bin", "actool"), argv)
-
- -- update files and values to the dependent file
- dependinfo.files = {sourcefile}
- depend.save(dependinfo, dependfile)
-end
-
--- build *.storyboard file
-function _build_storyboard_file(target, sourcefile, opt)
-
- -- get xcode sdk directory
- local xcode_sdkdir = assert(get_config("xcode"), "xcode not found!")
- local xcode_usrdir = path.join(xcode_sdkdir, "Contents", "Developer", "usr")
-
- -- get base.lproj
- local base_lproj = path.join(target:autogendir(), "rules", "xcode", "storyboard", "Base.lproj")
-
- -- get app resources directory
- local resourcesdir = target:data("xcode.app.resourcesdir")
-
- -- need re-compile it?
- local dependfile = target:dependfile(sourcefile)
- local dependinfo = option.get("rebuild") and {} or (depend.load(dependfile) or {})
- if not depend.is_changed(dependinfo, {lastmtime = os.mtime(dependfile)}) then
- return
- end
-
- -- trace progress info
- cprintf("${color.build.progress}" .. theme.get("text.build.progress_format") .. ":${clear} ", opt.progress)
- if option.get("verbose") then
- cprint("${dim color.build.object}compiling.xcode.storyboard %s", sourcefile)
- else
- cprint("${color.build.object}compiling.xcode.storyboard %s", sourcefile)
- end
-
- -- do compile
- local argv = {"--errors", "--warnings", "--notices", "--auto-activate-custom-fonts", "--output-format", "human-readable-text"}
- if is_plat("macosx") then
- table.insert(argv, "--target-device")
- table.insert(argv, "mac")
- elseif is_plat("iphoneos") then
- table.insert(argv, "--target-device")
- table.insert(argv, "iphone")
- table.insert(argv, "--target-device")
- table.insert(argv, "ipad")
- else
- assert("unknown device!")
- end
- table.insert(argv, "--minimum-deployment-target")
- table.insert(argv, get_config("target_minver"))
- table.insert(argv, "--compilation-directory")
- table.insert(argv, base_lproj)
- table.insert(argv, sourcefile)
- os.vrunv(path.join(xcode_usrdir, "bin", "ibtool"), argv, {envs = {XCODE_DEVELOPER_USR_PATH = xcode_usrdir}})
-
- -- do link
- argv = {"--errors", "--warnings", "--notices", "--auto-activate-custom-fonts", "--output-format", "human-readable-text"}
- if is_plat("macosx") then
- table.insert(argv, "--target-device")
- table.insert(argv, "mac")
- end
- table.insert(argv, "--minimum-deployment-target")
- table.insert(argv, get_config("target_minver"))
- table.insert(argv, "--link")
- table.insert(argv, resourcesdir)
- table.insert(argv, path.join(base_lproj, path.filename(sourcefile) .. "c"))
- os.vrunv(path.join(xcode_usrdir, "bin", "ibtool"), argv, {envs = {XCODE_DEVELOPER_USR_PATH = xcode_usrdir}})
-
- -- update files and values to the dependent file
- dependinfo.files = {sourcefile}
- depend.save(dependinfo, dependfile)
-end
-
--- main entry
-function main (target, sourcefile, opt)
- if sourcefile:endswith(".xcassets") then
- _build_xcassets_file(target, sourcefile, opt)
- elseif sourcefile:endswith(".storyboard") then
- _build_storyboard_file(target, sourcefile, opt)
- end
-end
diff --git a/xmake/rules/xcode/application/install.lua b/xmake/rules/xcode/application/install.lua
index 1339e13de..76a20e731 100644
--- a/xmake/rules/xcode/application/install.lua
+++ b/xmake/rules/xcode/application/install.lua
@@ -20,7 +20,7 @@
-- main entry
function main (target)
- local appdir = path.absolute(target:data("xcode.app.rootdir"))
+ local appdir = path.absolute(target:data("xcode.bundle.rootdir"))
local installdir = target:installdir()
if not os.isdir(installdir) then
os.mkdir(installdir)
diff --git a/xmake/rules/xcode/application/load.lua b/xmake/rules/xcode/application/load.lua
index 4986d454f..d3026948e 100644
--- a/xmake/rules/xcode/application/load.lua
+++ b/xmake/rules/xcode/application/load.lua
@@ -24,7 +24,7 @@ function main (target)
-- get app directory
local targetdir = target:targetdir()
local appdir = path.join(targetdir, target:basename() .. ".app")
- target:data_set("xcode.app.rootdir", appdir)
+ target:data_set("xcode.bundle.rootdir", appdir)
-- get contents and resources directory
local contentsdir = appdir
@@ -33,8 +33,8 @@ function main (target)
contentsdir = path.join(appdir, "Contents")
resourcesdir = path.join(appdir, "Contents", "Resources")
end
- target:data_set("xcode.app.contentsdir", contentsdir)
- target:data_set("xcode.app.resourcesdir", resourcesdir)
+ target:data_set("xcode.bundle.contentsdir", contentsdir)
+ target:data_set("xcode.bundle.resourcesdir", resourcesdir)
-- set target directory for app
target:set("kind", "binary")
diff --git a/xmake/rules/xcode/application/uninstall.lua b/xmake/rules/xcode/application/uninstall.lua
index a229faba6..4a95cb05e 100644
--- a/xmake/rules/xcode/application/uninstall.lua
+++ b/xmake/rules/xcode/application/uninstall.lua
@@ -20,7 +20,7 @@
-- main entry
function main (target)
- local appdir = path.absolute(target:data("xcode.app.rootdir"))
+ local appdir = path.absolute(target:data("xcode.bundle.rootdir"))
local installdir = target:installdir()
os.tryrm(path.join(installdir, path.filename(appdir)))
end
diff --git a/xmake/rules/xcode/application/xmake.lua b/xmake/rules/xcode/application/xmake.lua
index 75cae682d..ac1624d73 100644
--- a/xmake/rules/xcode/application/xmake.lua
+++ b/xmake/rules/xcode/application/xmake.lua
@@ -18,18 +18,15 @@
-- @file xmake.lua
--
--- define rule: xcode application (TODO developing)
+-- define rule: xcode application
rule("xcode.application")
- -- support add_files("*.storyboard")
- set_extensions(".storyboard", ".xcassets")
+ -- support add_files("*.storyboard", "*.xcassets")
+ add_deps("xcode.storyboard", "xcode.xcassets")
-- we must set kind before target.on_load(), may we will use target in on_load()
before_load("load")
- -- build *.storyboard and *.xcassets
- on_build_file("build_file")
-
-- build *.app
after_build("build")