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

建议kind增加 framework 类型 #743

Closed
fasiondog opened this issue Apr 3, 2020 · 30 comments
Closed

建议kind增加 framework 类型 #743

fasiondog opened this issue Apr 3, 2020 · 30 comments

Comments

@fasiondog
Copy link
Contributor

建议kind增加 framework 类型,编译输出iOS和mac的framework

@waruqi waruqi added this to the v2.3.3 milestone Apr 3, 2020
@waruqi
Copy link
Member

waruqi commented Apr 3, 2020

kind 是固定的,不能改,不过可以通过rules 来增加对frameworks支持,回头有空我看下

@waruqi
Copy link
Member

waruqi commented Apr 5, 2020

我framework支持上了,可以更新到dev分支试试

add_rules("mode.debug", "mode.release")

target("test")
    add_rules("xcode.framework")
    add_files("src/test.m")
    add_installfiles("src/Info.plist")
    --set_values("xcode.codesign_identity", "Apple Development: xxx@gmail.com (T3NA4MRVPU)")

也可以通过模板创建空工程:

xmake create -t xcode.framework -l objc test

目前签名还没完全弄好,回头我加上,不过对于mac上使用目前应该没啥大问题,你可以先试试

@waruqi
Copy link
Member

waruqi commented Apr 5, 2020

签名支持我也加上了,只需要启用:

set_values("xcode.codesign_identity", "Apple Development: xxx@gmail.com (T3NA4MRVPU)")

@fasiondog
Copy link
Contributor Author

好,公司的项目现在试不了,明天试

@waruqi
Copy link
Member

waruqi commented Apr 5, 2020

签名支持我改进了下,只需要设置即可(而且默认会自动检测选择一个可用的,也不用每次手动配置):

xmake f --xcode_codesign_identity="Apple Development: xxx@gmail.com (T3NA4MRVPU)"

当然,set_values("xcode.codesign_identity")的设置还是支持的,这样不同target支持不同的签名设置

@fasiondog
Copy link
Contributor Author

应该可以,有看见生成相关目录,但我没有注册开发者,签名不会用,明天问问弄ios的人,默认检测的不行(可能没注册开发者)。另外,能不能支持无需注册的? 我目前都是直接用framework的结构封装下就好。

@fasiondog
Copy link
Contributor Author

另外,更新了这个dev后,原android的项目编译出现问题,单元测试的可执行程序原来只需要指定依赖的so,so的工程里指定了add_links依赖的其他库(动/静态都有)就行,现在还必须在单元测试的工程里再加一遍其他依赖的库(add_links)。这样so不知道在手机上行不行?(没来得及试)

@waruqi
Copy link
Member

waruqi commented Apr 6, 2020

应该可以,有看见生成相关目录,但我没有注册开发者,签名不会用,明天问问弄ios的人,默认检测的不行(可能没注册开发者)。另外,能不能支持无需注册的? 我目前都是直接用framework的结构封装下就好。

如果没有效注册过的签名,应该检测不到才对,检测不到,就不会去签名,你先试试吧

@waruqi
Copy link
Member

waruqi commented Apr 6, 2020

另外,更新了这个dev后,原android的项目编译出现问题,单元测试的可执行程序原来只需要指定依赖的so,so的工程里指定了add_links依赖的其他库(动/静态都有)就行,现在还必须在单元测试的工程里再加一遍其他依赖的库(add_links)。这样so不知道在手机上行不行?(没来得及试)

这是因为,为了支持上framework,我对内部之前写死的一些links继承逻辑进行了局部重构(为了提高可扩展性),可能有些case没改全吧,我回头看看再处理下。。

@waruqi
Copy link
Member

waruqi commented Apr 6, 2020

另外,更新了这个dev后,原android的项目编译出现问题,单元测试的可执行程序原来只需要指定依赖的so,so的工程里指定了add_links依赖的其他库(动/静态都有)就行,现在还必须在单元测试的工程里再加一遍其他依赖的库(add_links)。这样so不知道在手机上行不行?(没来得及试)

这是因为,为了支持上framework,我对内部之前写死的一些links继承逻辑进行了局部重构(为了提高可扩展性),可能有些case没改全吧,我回头看看再处理下。。

我刚稍微处理了下,你再更新下dev试试,之前重构后把shared的继承去掉了

@waruqi
Copy link
Member

waruqi commented Apr 6, 2020

应该可以,有看见生成相关目录,但我没有注册开发者,签名不会用,明天问问弄ios的人,默认检测的不行(可能没注册开发者)。另外,能不能支持无需注册的? 我目前都是直接用framework的结构封装下就好。

如果没有效注册过的签名,应该检测不到才对,检测不到,就不会去签名,你先试试吧

这块我也改进了下

  1. 如果xmake f --xcode_codesign_identity=n 那么会禁用codesign对指定identity进行签名
  2. 如果没设置,xmake f -c默认检测使用有效的identity进行签名
  3. 通过手动指定identity来签名,xmake f --xcode_codesign_identity=xxxxxx

@fasiondog
Copy link
Contributor Author

好的,我看看明天能不能试下,这两天比较忙还没实验

@waruqi
Copy link
Member

waruqi commented Apr 8, 2020

恩,我稍微改进了下,info.plist统一放置到 add_files里面去,add_installfiles用于resources文件的安装

add_rules("mode.debug", "mode.release")

target("test")
    add_rules("xcode.framework")
    add_files("src/test.m")
    add_files("src/Info.plist")

@waruqi
Copy link
Member

waruqi commented Apr 11, 2020

这块可以了么?后续使用可以看下文档,我更新过了:https://xmake.io/#/zh-cn/guide/project_examples?id=framework%e5%ba%93%e7%a8%8b%e5%ba%8f

@fasiondog
Copy link
Contributor Author

还没来的及,周一试下 :(

@fasiondog
Copy link
Contributor Author

正准备试,出了另外的问题 add_frameworks 没生效(另提了个issue),有得推迟下

@fasiondog
Copy link
Contributor Author

我是个静态库封framework,咋弄,好像可执行程序可以。不指定 set_kind ,结果出来里的目标连接不存在(即编译出的framework里有个软连接,但是连的位置不存在实际目标

@fasiondog
Copy link
Contributor Author

图片

@waruqi
Copy link
Member

waruqi commented Apr 14, 2020

目前xcode.framework 内部用的shared kind,static的还不支持。。

@waruqi
Copy link
Member

waruqi commented Apr 14, 2020

你更新下dev,然后追加下 set_kind("static") 试试,默认是shared framework

@fasiondog
Copy link
Contributor Author

还是不行

@waruqi
Copy link
Member

waruqi commented Apr 14, 2020

给下完整编译输出和错误信息 以及xmake.lua内容

@waruqi
Copy link
Member

waruqi commented Apr 16, 2020

可以了么? 错误输出给下呢

@fasiondog
Copy link
Contributor Author

稍缓下,这两天没来得及

@fasiondog
Copy link
Contributor Author

查了下,我这边还引用了内部 自定义的一个 rules ,这个 rules 里加了下面几句,导致无法framework最终结果里的软链接无效,去除后即可。
--target:set("objectdir", "$(buildir)/$(mode)/$(plat)/$(arch)/.objs")
--target:set("targetdir", "$(buildir)/$(mode)/$(plat)/$(arch)/lib")
--target:add("includedirs", ".")

@fasiondog
Copy link
Contributor Author

虽然有生成framework,但是会报这个错:
checking for the codesign ... /usr/bin/codesign
/usr/bin/codesign --force --timestamp=none --sign - build/macosx/x86_64/release/yhsdk.framework/Versions/A
build/macosx/x86_64/release/yhsdk.framework/Versions/A: code object is not signed at all
In subcomponent: /Users/ljh/tmp/yhfacedetect/build/macosx/x86_64/release/yhsdk.framework/Versions/A/yhsdk
error: @programdir/modules/private/async/runjobs.lua:213: @programdir/core/sandbox/modules/os.lua:387: execv(/usr/bin/codesign --force --timestamp=none --sign - build/macosx/x86_64/release/yhsdk.framework/Versions/A) failed(1)
stack traceback:
[C]: in function 'error'
[@programdir/core/base/os.lua:787]: in function 'raise'
[@programdir/core/sandbox/modules/os.lua:387]: in function 'runv'
[@programdir/core/sandbox/modules/os.lua:284]: in function 'vrunv'
[@programdir/modules/private/tools/codesign.lua:166]: in function 'codesign'
[@programdir/rules/xcode/framework/xmake.lua:149]: in function 'after_build'
[@programdir/actions/build/build.lua:120]: in function 'jobfunc'
[@programdir/modules/private/async/runjobs.lua:190]:
[C]: in function 'trycall'
[@programdir/core/sandbox/modules/try.lua:121]: in function 'try'
[@programdir/modules/private/async/runjobs.lua:187]: in function 'cotask'
[@programdir/core/base/scheduler.lua:317]:

stack traceback:
[C]: in function 'error'
@programdir/core/base/os.lua:787: in function 'raise'
@programdir/modules/private/async/runjobs.lua:213: in function 'catch'
@programdir/core/sandbox/modules/try.lua:127: in function 'try'
@programdir/modules/private/async/runjobs.lua:187: in function 'cotask'
@programdir/core/base/scheduler.lua:317: in function <@programdir/core/base/scheduler.lua:315>

@fasiondog
Copy link
Contributor Author

虽然有生成framework,但是会报这个错:
checking for the codesign ... /usr/bin/codesign
/usr/bin/codesign --force --timestamp=none --sign - build/macosx/x86_64/release/yhsdk.framework/Versions/A
build/macosx/x86_64/release/yhsdk.framework/Versions/A: code object is not signed at all
In subcomponent: /Users/ljh/tmp/yhfacedetect/build/macosx/x86_64/release/yhsdk.framework/Versions/A/yhsdk
error: @programdir/modules/private/async/runjobs.lua:213: @programdir/core/sandbox/modules/os.lua:387: execv(/usr/bin/codesign --force --timestamp=none --sign - build/macosx/x86_64/release/yhsdk.framework/Versions/A) failed(1)
stack traceback:
[C]: in function 'error'
[@programdir/core/base/os.lua:787]: in function 'raise'
[@programdir/core/sandbox/modules/os.lua:387]: in function 'runv'
[@programdir/core/sandbox/modules/os.lua:284]: in function 'vrunv'
[@programdir/modules/private/tools/codesign.lua:166]: in function 'codesign'
[@programdir/rules/xcode/framework/xmake.lua:149]: in function 'after_build'
[@programdir/actions/build/build.lua:120]: in function 'jobfunc'
[@programdir/modules/private/async/runjobs.lua:190]:
[C]: in function 'trycall'
[@programdir/core/sandbox/modules/try.lua:121]: in function 'try'
[@programdir/modules/private/async/runjobs.lua:187]: in function 'cotask'
[@programdir/core/base/scheduler.lua:317]:

stack traceback:
[C]: in function 'error'
@programdir/core/base/os.lua:787: in function 'raise'
@programdir/modules/private/async/runjobs.lua:213: in function 'catch'
@programdir/core/sandbox/modules/try.lua:127: in function 'try'
@programdir/modules/private/async/runjobs.lua:187: in function 'cotask'
@programdir/core/base/scheduler.lua:317: in function <@programdir/core/base/scheduler.lua:315>

简单的test示例就会

@waruqi
Copy link
Member

waruqi commented Apr 21, 2020

查了下,我这边还引用了内部 自定义的一个 rules ,这个 rules 里加了下面几句,导致无法framework最终结果里的软链接无效,去除后即可。

是怎么个无效法?soft link指向无效文件?运行tree -l xxx.framework 给我看下目录结构和link情况,并且哪些link无效 也说明下

--target:set("objectdir", "$(buildir)/$(mode)/$(plat)/$(arch)/.objs")
--target:set("targetdir", "$(buildir)/$(mode)/$(plat)/$(arch)/lib")
--target:add("includedirs", ".")

这个确实是没必要的设置。默认就是分mode/plat/arch生成的objs/lib

build/macosx/x86_64/release/yhsdk.framework/Versions/A: code object is not signed at all
In subcomponent:

这个签名错误,看提示应该是framework目录下有多个binary存在 没有完全签名导致,具体我还是要看下你这xxx.framework的完整结构 才能进一步分析原因

@fasiondog
Copy link
Contributor Author

就是目标静态库的软链接,实际静态库没有拷贝到framework下。我明天看下发个示例的工程给你

@waruqi
Copy link
Member

waruqi commented Apr 24, 2020

我改进过了 先试试吧 回头有问题再开

@waruqi waruqi closed this as completed Apr 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants