MonoTouch
Xamarin.iOS v6.3.0.255と.NET v4.5で以下のコードの戻り値が異なっていた。 DateTime t1 = new DateTime(2013, 4, 19, 9, 0, 0, DateTimeKind.Utc); DateTime t2 = TimeZoneInfo.ConvertTimeFromUtc(t1, TimeZoneInfo.Local); t2.Kindは、 Xamarin.iOSはUns…
Xamarin Studio v4.0.3*1とXamarin.iOS v6.3.0.255の組み合わせで突然デバッグできなくなってしまった。 症状としてはブレークポイントのところでブレークする瞬間にSystem.NotImplementedException例外が起きるようになった。 この組み合わせで数日間まった…
MonoTouchのリリースビルドはコンソールから以下のコマンドで可能。 /Applications/MonoDevelop.app/Contents/MacOS/mdtool build ソリューションファイル名 -c:'コンフィグ名'コンフィグ名とは'Ad-Hoc|iPhone'や'Release|iPhone'のこと。上記をふまえるとビ…
Appが自分自身で強制終了したい場合、MonoTouchでは以下のコードで強制終了が可能になる。 UIApplication.SharedApplication.PerformSelector(new Selector("terminateWithSuccess"), null, 0f); 試してはいないがもう一つ見つけたのがInfo.plistでUIApplica…
Appがクラッシュした時に生成されるクラッシュログ。この中身は関数アドレスが書いてあるだけでとても読み取りにくい。本家Appならばオーガナイザでアドレスのシンボル解決を自動的にやってくれるのだが、MonoTouch製Appの場合は手動で行う必要がある。 下準…
キーボードのReturnキーの部分が押された時の処理はShouldReturnデリゲートを使う。 次のフィールドにカーソルを移動する場合 UITextField text1; UITextField text2; text1.ShouldReturn = delegate { // BecomeFirstResponderメソッドで移動させる text2.B…
Settings.Bundleで定義された設定を操作してみた。取得 NSUserDefaults prefs = NSUserDefaults.StandardUserDefaults; string testValue = prefs.StringForKey("testKey"); 設定 NSUserDefaults prefs = NSUserDefaults.StandardUserDefaults; prefs.SetStr…
入力されたパスワードを安全に保存するためにKeyChainを使ってみた。 最初保存したレコードを読み出せず苦労したがAccessible属性を設定することで解決した。この属性は必須なのだろうか。 using MonoTouch.Security; private string LoadPassword (string u…
こちらの都合で使わないけど引数を宣言する場合がある。 この時MonoDevelop(というかコンパイラ)が律儀にワーニングを出してくれるができれば無視して欲しい。 で、こんな時はpragmaで制御できるのでその備忘録 // variable declared but not used. #pragma …
RetinaなiPadでCATextLayerの文字がぼやけているのに気づいた。 UILabel等はくっきり表示されている。 調べるとCALayerのContentsScaleを適切に変更しなければならなかった。 CATextLayer textLayer = new CATextLayer(); textLayer.ContentsScale = UIScree…
画像をタイル上に並べて描画する必要があったのでMonoTouchでコードを書いてみた。 ここでの描画先はCALayer。 アニメーションは必要無かったのでOFFにしてある。 using MonoTouch.CoreAnimation; using MonoTouch.CoreGraphics; private CALayer layer; pri…
OTA配信するためには以下の物が必要になる。 MonoTouchのライセンス Appを正式に署名できる証明書等 デバイスがインターネットに接続できる環境(3GやWiFi等) 画像2種 info.plistの設定 plistファイル ipaファイル plistファイルへのリンクが書かれたHTMLファ…
Mac版MonoDevelopの自動更新を有効にしたかったのでこの方法でプロキシを経由できるようにしていた。 しかし最近になってMonoTouch製アプリをiOSシミュレータ内で動かしているとき、プロキシをバイパスできていないことが判った。 正確にはMonoTouch製Appの…
SecureString型がMonoTouchでも使えるかどうか検証してみた。 using System.Security; using System.Runtime.InteropServices; SecureString ss = new SecureString(); foreach (var v in "ABCDFG") { ss.AppendChar(v); } ss.MakeReadOnly(); IntPtr ssPtr …
基本的なルールすぎて忘れがちだがメインスレッド以外のスレッドからUIViewにアクセスしてはいけない。というわけですっかり忘れていて数時間無駄にしてしまった。 場所はUITextViewに対して文字列を設定する箇所。 Application Outputには以下の様に出力さ…
CALayerクラスのBorderColorやBackgroundColorといったxxxColorプロパティに対してCGColorを代入した時、メモリリークが発生してしまう現象が起きた。以下の様にした時、 layer = CALayer.Create (); layer.BorderColor = new CGColor(1.0f, 1.0f, 1.0f, 1.0…
角丸四角を描画しているところでふとしたことに気がついた。白一色でべた塗りしているところが下の画像のように、 角丸の縁の部分で色が濃くなってしまいなんともキタナイ。以前はこうではなかった。調べると原因はアンチエイリアスが有効になっていることだ…
MonoTouch v5.1.1 betaがダウンロードできるようになったので早速インストールしてみた。 するとAppをビルドしてデバイス(iPad2)にインストールするときに例外がでるようになってしまった。 Please ensure your device is connected... Connected to: iPad I…
Xamarinにあるサンプル(How to record sound using the iPhone microphone)が間違っていたので修正してみた。上記ページにある //public void start Recording public void StartRecording () { NSObject[] values = new NSObject[] { NSNumber.FromFloat(44…
MonoDevelopからデバイスに対するAppのインストールが出来なくなった時の備忘録。プロジェクトに追加したファイル以外のファイルをカスタムコマンドを使ってAppのパッケージに含める時、コンパイルが始まるまでにAppの出力先フォルダに含めておく必要がある。…
iPhoneやiPad向けにPNGファイルを最適化したほうがパフォーマンスが良いらしい。 この最適化は本来xcodeが自動的に行ってくれるがMonoTouchは行ってくれないので自前で行う必要がある。 とりあえず以下のコマンドラインを使うことで最適化できた。 /Develope…
iOSシミュレータでMonoTouchプログラムをデバッグしていると、Mono.Data.Sqlite.UnsafeNativeMethods.sqlite3_prepareで例外が発生するようになった。 MonoTouch 4.0.3と4.0.4.1とMono2.10.2の組み合わせ全てで問題がおきる。 この例外、MonoDevelopではキャ…
MonoTouchにおいて文字列の描画に必要な短形の計算の方法 UIViewのStringSizeメソッド NSStringのStringSizeメソッド
UISwipeGestureRecognizerを使う方法。自前でイベントを処理するよりはるかにコードが簡潔になる。 using MonoTouch.Foundation; using MonoTouch.UIKit; using MonoTouch.ObjCRuntime; public class UISwipeView : UIView { UISwipeGestureRecognizer swRec…
MonoTouch*1ではニュートラルカルチャーなCultureInfoからDateTimeFormatを取り出せない。 CultureInfo c = new CultureInfo("en"); DateTimeFormatInfo f = c.DateTimeFormat; <- ここでNotSupportedExceptionが発生する たしかに言語だけの指定で地域が不…
ShouldBeginEditingのdelegateで常にfalseを返すようにすればキーボードが表示されなくなる。 UITextField text = new UITextField(new RectangleF(0,0,50,31); text.ShouldBeginEditing += delegate { return false; } キーボードは表示されなくなるが、そ…
UIPopoverControllerでタイトルを追加にはUIPopoverControllerの元になるUIViewControllerに対してTitleとNavigationItemにボタンを追加する。 しかし直接UINavigationControllerを作ってTitle等を変えてもなにも起きなかった。 この場合、UIViewController…
UIPopoverControllerで矢印を表示しないようにするにはpresentPopoverFromRectのpermittedArrowDirectionsに0を渡せば良い。 しかしMonoTouchのPresentFromRectメソッドはUIPopoverArrowDirection列挙値しか受け付けてくれない。というわけで0を渡せるように…
実機上でデバッグするときはネットワーク経由で行う。このときのIPアドレスは基本的に無線LAN(Airmac)のIPアドレスがデフォルト。しかし有線LANや仮想LANが有効になっているとMonoDevelopが使用するIPアドレスを間違うことがある。 この問題はMonoDevelopの…
UITabBarのボタンを押すとハイライトされる。これを解除するにはUITabBarのSelectedItemにnilを代入する必要がある。MonoTouchだとnull代入だと思い、 tabBar.SelectedItem = null; としたらnullチェックの例外が発生した。どうも引数nullには対応していない…