投稿

4月, 2016の投稿を表示しています

macのdylibのロード方法

macでdylibのプロジェクト(ここでは、libXXXX.dylib)とそれを使用するアプリ(ここではXXXXDriver)のプロジェクトがあって、xcodeからは実行できるけど、ターミナルから叩くと dyld: Library not loaded: /usr/local/lib/libXXXX.dylib   Referenced from: /Users/username/Library/Developer/Xcode/DerivedData/XXXXi_dylib-cagqvakmzwqigmgxxrwzutupseja/Build/Products/Release/./XXXXDriver   Reason: image not found Trace/BPT trap: 5 というようなメッセージが出力されて起動できない問題に対処したのでメモ 解決方法1: /usr/local/libに ロードしようとする libXXXX.dylibをコピーする → 環境が汚れるし、なんか負けた気がするのでNG 解決方法2:起動用のshファイルを作ってそれを叩く方法 test.shファイルを作ってそれをターミナルから叩いて実行させるようにする話。 #!/bin/sh # dylibのロードするパスを通す export DYLD_LIBRARY_PATH=/Users/username/Library/Developer/Xcode/DerivedData/XXXXi_dylib-cagqvakmzwqigmgxxrwzutupseja/Build/Products/Release:$DYLD_LIBRARY_PATH # 実行 ./XXXXDriver このファイルをtest.shとして保存して、chmod +x test.sh とやって実行できるようにする。 これでターミナル上で./test.shと叩けば、きちんと実行できるようになる!!

Xamarin.FormsでiOSのネイティブコードを使用して苦労した件について

Xamarin.FormsでiOSの自作ネイティブライブラリを使用しようとしてハマった話。 普通にiOSでやれば簡単だったけど、Cross-platformにしようとしたら面倒だったという話。 環境 mac book pro/El Capitan Xamarin 5.10.3 手順 新規ソリューションの作成でCross-platform / Xamarin.Forms Appを作る ネイティブバインディング用のプロジェクトとして、iOS / Bindings Libraryを作る Sharpieなどを使ってバインディングコードを書く → ここ あたりにやり方が描かれている。 1で作られたiOS用のプロジェクトに2のネイティブバインディングのアセンブリを参照設定で追加しようとする。 → プロジェクト参照では、Xamarin.iOSとmonotouchで互換性がないのでNGと怒られるので、「.Net Assembly」タブの「ブラウズ」で無理くり参照設定する。 ビルド → エラーになってビルドが通らなくなる。 対応 結局、csprojファイルを直接書き換えることで対応した。 いじる対象のcsprojファイルはバインディング側のプロジェクトファイルだ /Project/PropertyGroup/ProjectTypeGuids要素を修正する。     <ProjectTypeGuids>{8FFB629D-F513-41CE-95D2-7ECE97B6EEEC};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> となっている箇所を     <ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> に変更する。 この要素は、プロジェクトのタイプを示していて、<ProjectTypeGuids>[作ったプロジェクトの種類(例えばiOSのアプリとかAndroidのアプリとか)を示す

2つのバイナリを1つに統合するけん

iOSのシミュレータ用の.aファイルと実機用の.aファイルを一つにまとめて使いやすくする巻 $> xcrun -sdk iphoneos lipo -create ../Release-iphoneos/libPDMani.a ../Release-iphonesimulator/libPDMani.a -output ../libPDMani.a 説明: ../Release-iphoneos 下の libPDMani.a (ARM系バイナリ) と ../Release-iphonesimulator 下の libPDMani.a (i386系バイナリ) を1つにまとめて-outputに指定した ../libPDMani.aに出力する方法。 -sdk iphoneos とか lipo とかはよくわからん。何かのおまじない。

Xamarinのxamlのデータバインディングのpart4について訳してみた。

Part4. データバインディングの基礎 データバインディングは2つのオブジェクトのプロパティをリンクし、片方の変更を契機に もう片方の変更を発生させることができます。 これは大変価値のあるツールです。そしてデータバインディングはソースコード上で完璧に 定義することができ、XAMLはそのショートカットと利便性を提供します。 その結果として、バインティングがXamarin.Formsのマークアップ拡張は最も重要な機能 の一つとなります。 データバインディング データバインティングは2つのオブジェクトのプロパティを接続し、ソースからターゲットへ 呼び出しを行います。コードの中では、2つのステップが要求されます。 一つ目は、ターゲットオブジェクトのBindingContextプロパティを必ずソースオブジェクト にセットする必要があります。 二つ目は、SetBindingメソッド(しばしばBindingクラスと組み合わせて使用される)で、 ソースオブジェクトのプロパティに、そのオブジェクトのプロパティをバインドするために、 ターゲットオブジェクトから呼び出されなければなりません。 ターゲットプロパティは、バインディング可能なプロパティである必要があります。 つまり、ターゲットオブジェクトは必ずBindingObjectから継承されている必要があります。 オンラインのXamain.Formsのドキュメントでは、プロパティはバインド可能なプロパティで あることを示しています。 マークアップ中では、これらは同じ2つのステップが要求され、バインディングマークアップ の拡張機能は、SetBindingの呼び出しと、Bindingクラスの代わりに使用されます。 しかしながら、これらはターゲットオブジェクトのBindingContextへセットする単一の テクニックではありません。 しばしば、StaticResourceもしくはx:Staticマークアップ拡張機能を使用して、コード ビハインドのファイルからこれらは設定されます。 バインディングが最も頻繁に使用されるのは、画面表示系のプログラムとベースのデータモデル を接続する時で、しばしばMVVM(Model-View-ViewModel)アプリケーションアーキテクチャ で実現されます。MVVMについては