firebreath フレームワークを使用して作成した機能するプラグインがあります。それに MTP 読み書きサポートを追加する必要があります。
いくつかの調査の後、libmtp ( http://libmtp.sourceforge.net/ ) にたどり着きました。ソースをダウンロードしてビルドし、サンプルを実行して MTP デバイスに読み書きすることができました。
次に、Firebreath プラグイン プロジェクトでこのライブラリを使用するように追加しようとしました。正常にコンパイルできますが、以下のリンカ エラーが発生します。libusb.a および libiconv.a ファイルを含むディレクトリを検索ライブラリ パスに追加しました。
Mac Ports バージョンも使用してみました (sudo ports install libmtp +universal)
注: libmtp を使用するには、libiconv と libusb がインストールされている必要があります
xcodeで取得するリンカーエラーは次のとおりです。
Undefined symbols for architecture i386:
"_libiconv", referenced from:
_ptp_unpack_string in libmtp.a(libmtp_la-ptp.o)
_ptp_pack_string in libmtp.a(libmtp_la-ptp.o)
_utf16_to_utf8 in libmtp.a(libmtp_la-unicode.o)
_utf8_to_utf16 in libmtp.a(libmtp_la-unicode.o)
"_libiconv_close", referenced from:
_LIBMTP_Release_Device in libmtp.a(libmtp_la-libmtp.o)
"_libiconv_open", referenced from:
_LIBMTP_Open_Raw_Device_Uncached in libmtp.a(libmtp_la-libmtp.o)
"_libusb_bulk_transfer", referenced from:
_ptp_write_func in libmtp.a(libmtp_la-libusb1-glue.o)
_ptp_usb_getdata in libmtp.a(libmtp_la-libusb1-glue.o)
_ptp_read_func in libmtp.a(libmtp_la-libusb1-glue.o)
_ptp_usb_event in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_claim_interface", referenced from:
_init_ptp_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_clear_halt", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
_close_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_close", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
_close_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_control_transfer", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
_ptp_usb_control_cancel_request in libmtp.a(libmtp_la-libusb1-glue.o)
_init_ptp_usb in libmtp.a(libmtp_la-libusb1-glue.o)
_close_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_detach_kernel_driver", referenced from:
_init_ptp_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_free_config_descriptor", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_free_device_list", referenced from:
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_get_bus_number", referenced from:
_LIBMTP_Detect_Raw_Devices in libmtp.a(libmtp_la-libusb1-glue.o)
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_get_config_descriptor", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_get_device", referenced from:
_dump_usbinfo in libmtp.a(libmtp_la-libusb1-glue.o)
_get_playlist_extension in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_get_device_address", referenced from:
_LIBMTP_Detect_Raw_Devices in libmtp.a(libmtp_la-libusb1-glue.o)
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_get_device_descriptor", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
_LIBMTP_Detect_Raw_Devices in libmtp.a(libmtp_la-libusb1-glue.o)
_dump_usbinfo in libmtp.a(libmtp_la-libusb1-glue.o)
_get_playlist_extension in libmtp.a(libmtp_la-libusb1-glue.o)
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_get_device_list", referenced from:
_LIBMTP_Check_Specific_Device in libmtp.a(libmtp_la-libusb1-glue.o)
_LIBMTP_Detect_Raw_Devices in libmtp.a(libmtp_la-libusb1-glue.o)
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_get_string_descriptor_ascii", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_init", referenced from:
_LIBMTP_Check_Specific_Device in libmtp.a(libmtp_la-libusb1-glue.o)
_LIBMTP_Detect_Raw_Devices in libmtp.a(libmtp_la-libusb1-glue.o)
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_kernel_driver_active", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
_dump_usbinfo in libmtp.a(libmtp_la-libusb1-glue.o)
_init_ptp_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_open", referenced from:
_probe_device_descriptor in libmtp.a(libmtp_la-libusb1-glue.o)
_init_ptp_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_release_interface", referenced from:
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
_close_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_reset_device", referenced from:
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
_close_usb in libmtp.a(libmtp_la-libusb1-glue.o)
"_libusb_set_debug", referenced from:
_LIBMTP_Check_Specific_Device in libmtp.a(libmtp_la-libusb1-glue.o)
_LIBMTP_Detect_Raw_Devices in libmtp.a(libmtp_la-libusb1-glue.o)
_configure_usb_device in libmtp.a(libmtp_la-libusb1-glue.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)