Ошибка имени класса TCPServer в RubyMotion (OSX)

У меня есть код, который я переношу на RubyMotion из MacRuby, и я получаю ошибку имени TCPServer: Вот сообщение об ошибке:

app_delegate.rb:29:in `control_server:': uninitialized constant AppDelegate::TCPServer (NameError)

Это строка кода, которая вызывает проблему:

dts = TCPServer.new(ip, port)

Я читал, что некоторые классы из Ruby не включены в RubyMotion, но я не уверен, какие классы и как определить, какие классы недоступны.

Спасибо


person tsugua    schedule 26.05.2013    source источник


Ответы (1)


RubyMotion не включает в себя всю стандартную библиотеку Ruby, потому что RubyMotion не имеет встроенного способа работы с определенными частями языка Ruby, которые требуются для многих стандартных библиотек и жемчужин сообщества, таких как require, eval, load и так далее.

Традиционно мы справлялись с этим, используя вместо этого библиотеки Objective-C, поскольку RubyMotion легко соединяет классы Objective-C. Существует множество существующих библиотек Objective-C и великолепная система управления зависимостями в CocoaPods< /а>. Если вам не терпится немного переписать, вам подойдет библиотека CocoaAsyncSocket.

Если вы чувствуете себя немного более предприимчивым, вы можете попробовать заставить ваш существующий код работать, используя MotionBundler. Он пытается добавить поддержку require в RubyMotion с переменным успехом. Теоретически вы просто вернете эту строку require 'socket' в свой код после того, как настроите MotionBundler, и он должен позаботиться обо всем остальном. Я получил несколько довольно страшных следов стека, когда попробовал это сам, так что, вероятно, это не серебряная пуля. TCPServer вызывает особое беспокойство, так как я уверен, что он использует собственные расширения C, которые не поддерживаются MotionBundler.

person aethe    schedule 28.05.2013
comment
Спасибо Этэ. Я попробую motion bundler, но, вероятно, начну смотреть на сокеты Cocoa. - person tsugua; 29.05.2013
comment
Я попробовал motionbundler, и ему не понравилась библиотека сокетов, как вы подозревали. - person tsugua; 30.05.2013