【问题标题】:RubyMotion and CocoaPods problemsRubyMotion 和 CocoaPods 问题
【发布时间】:2012-05-06 15:58:27
【问题描述】:

让 CocoaPods 依赖项在 RubyMotion 中工作时遇到各种问题。首先,如果我将dependency 'JSONKit' 添加到我的Rakefile 中,然后运行rake,它会因can't convert Pathname into String 错误而中止。 rake --trace 然后产生以下输出:

** Invoke default (first_time)
** Invoke simulator (first_time)
** Invoke build:simulator (first_time)
** Execute build:simulator
/usr/bin/gen_bridge_metadata --format complete --no-64-bit --cflags "-I. -I." JSONKit.h -o "JSONKit.bridgesupport"
invalid option: --no-64-bit
Usage: gen_bridge_metadata [options] <headers...>
Use the `-h' flag or consult gen_bridge_metadata(1) for help.
rake aborted!
Command failed with status (1): [/usr/bin/gen_bridge_metadata --format comp...]
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/file_utils.rb:53:in `block in create_shell_runner'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/file_utils.rb:45:in `call'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/file_utils.rb:45:in `sh'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/file_utils_ext.rb:39:in `sh'
/Library/RubyMotion/lib/motion/project/vendor.rb:93:in `block in build_static'
/Library/RubyMotion/lib/motion/project/vendor.rb:34:in `chdir'
/Library/RubyMotion/lib/motion/project/vendor.rb:34:in `build_static'
/Library/RubyMotion/lib/motion/project/vendor.rb:23:in `build'
/Library/RubyMotion/lib/motion/project/builder.rb:37:in `block in build'
/Library/RubyMotion/lib/motion/project/builder.rb:36:in `each'
/Library/RubyMotion/lib/motion/project/builder.rb:36:in `build'
/Library/RubyMotion/lib/motion/project/app.rb:50:in `build'
/Library/RubyMotion/lib/motion/project.rb:33:in `block (2 levels) in <top (required)>'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:205:in `call'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:205:in `block in execute'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:200:in `each'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:200:in `execute'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:176:in `block in invoke_prerequisites'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:174:in `each'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:174:in `invoke_prerequisites'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:157:in `block in invoke_with_call_chain'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:176:in `block in invoke_prerequisites'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:174:in `each'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:174:in `invoke_prerequisites'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:157:in `block in invoke_with_call_chain'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/task.rb:144:in `invoke'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:116:in `invoke_task'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:94:in `block (2 levels) in top_level'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:94:in `each'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:94:in `block in top_level'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:88:in `top_level'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:66:in `block in run'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/Users/xxxx/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rake/application.rb:63:in `run'
/Users/xxxx/.rbenv/versions/1.9.3-p194/bin/rake:32:in `<main>'
Tasks: TOP => default => simulator => build:simulator

项目中的vendor目录包含各种JSONKit文件。

其次,在另一个 RubyMotion 应用程序中,如果我将 dependency 'Nimbus' 添加到我的 Rakefile 然后运行 ​​rake 应用程序会构建,但是当我尝试在我的代码中使用任何与 Nimbus 相关的东西并且没有供应商时,会出现未初始化的常量错误目录已创建。

这两种情况有什么问题?

【问题讨论】:

    标签: cocoapods rubymotion


    【解决方案1】:

    这里有几个问题。

    无法将路径名转换为字符串

    更新:截至 2012 年 5 月 7 日,您可以只使用 sudo motion update,这将得到修复

    此错误与您使用的是 Ruby 1.9 相关。虽然我没有在文档中看到它明确说明,但设置示例指的是在gem install 命令中使用sudo,这意味着假设您正在运行 OS X 的内置 ruby​​ (1.8. 7)。如果您将项目切换到系统 ruby​​(添加一个带有 system 的 .rbenv-version 文件)。或者,如果您想坚持使用 1.9,您可以将/Library/RubyMotion/lib/motion/project/vendor.rb 的第 22 行更改为:

    App.info 'Build', @path.to_s
    

    一旦这样做,您很有可能会收到如下错误:

    ERROR! Building vendor project `./vendor/JSONKit' failed to create at least one `.a' library.`
    

    您需要编辑同一文件的第 77 行才能阅读:

    objs = Dir.glob('**/*.o') # Removed the leading "*/"
    

    那么rake 应该终于可以正常工作了。

    已在motion-cocoapods repo 上提交了关于这些问题的问题:https://github.com/HipByte/motion-cocoapods/issues/1

    此外,我刚刚使用motion support为此提交了一份官方支持票。 (请记住,您为这个包含支持的全新产品付费;使用它!)

    雨云

    这里的问题是您需要顶级 cocoapod。由于它具有“子规范”,因此您需要直接要求它们,因此可能是dependency 'Nimbus/Core'。您可以查看它们的完整列表here(参见s.subspec 条目)

    【讨论】:

    • 谢谢迪伦。我尝试按照您的建议绕过 rbenv,但它导致了另一个错误 (gist.github.com/fa676e1f52349067d49e)。因此,我按照您所说的那样编辑了 vendor.rb ,但这仍然给我留下了invalid option: --no-64-bit 错误,如下面的 shawn42 所述。 Nimbus 解决方案已失效,谢谢。
    • 是的,我没有在我的机器上遇到 64 位错误,但听起来 shawn42 在下面的回答应该对此有所帮助。
    • 另外,感谢您提交支持票。星期五晚上我自己这样做了,但我没有收到任何回复 - 猜测 HipByte 的人现在很忙!
    • RubyMotion 1.2 刚刚发布,修复了与vendor.rb 文件相关的问题。
    【解决方案2】:

    关于 --no-64-bit 标志的编译错误是因为在 Snow Leopard 上的 RubyMotion 上出现了错误。根据https://gist.github.com/2597428更新/Library/RubyMotion/lib/motion/project/vendor.rb

    Laurent Sansonetti 已确认该错误:

    嗨,

    感谢您的报告!问题是 --no-64-bit 标志是 添加到 Lion 中,您似乎正在运行 Snow Leopard。我们将得到 这已修复。

    劳伦特

    【讨论】:

    • 感谢 shawn42。我确实在运行雪豹。您从要点加上 Dylan 对 vendor.rb 第 77 行的更改(如上所述)修复了 --no-64-bit 错误。
    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2013-10-11
    • 2013-10-25
    • 2015-06-22
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多