NSUserDefaultsへのアクセス

Settings.Bundleで定義された設定を操作してみた。取得 NSUserDefaults prefs = NSUserDefaults.StandardUserDefaults; string testValue = prefs.StringForKey("testKey"); 設定 NSUserDefaults prefs = NSUserDefaults.StandardUserDefaults; prefs.SetStr…

KeyChainを使ってみた

入力されたパスワードを安全に保存するためにKeyChainを使ってみた。 最初保存したレコードを読み出せず苦労したがAccessible属性を設定することで解決した。この属性は必須なのだろうか。 using MonoTouch.Security; private string LoadPassword (string u…

コンパイル時のワーニングを無視させる

こちらの都合で使わないけど引数を宣言する場合がある。 この時MonoDevelop(というかコンパイラ)が律儀にワーニングを出してくれるができれば無視して欲しい。 で、こんな時はpragmaで制御できるのでその備忘録 // variable declared but not used. #pragma …

CATextLayerのRetina対応

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…

iOS Enterpriseプログラムで作成したMonoTouch AppをIISからOTA配信してみた

OTA配信するためには以下の物が必要になる。 MonoTouchのライセンス Appを正式に署名できる証明書等 デバイスがインターネットに接続できる環境(3GやWiFi等) 画像2種 info.plistの設定 plistファイル ipaファイル plistファイルへのリンクが書かれたHTMLファ…

Mac版MonoDevelopとプロキシ その2

Mac版MonoDevelopの自動更新を有効にしたかったのでこの方法でプロキシを経由できるようにしていた。 しかし最近になってMonoTouch製アプリをiOSシミュレータ内で動かしているとき、プロキシをバイパスできていないことが判った。 正確にはMonoTouch製Appの…

Mono for Android v4 とx86版ICSエミュレータを組み合わせて開発する

止まっているのかと勘違いするほどクソ遅いARM版ICSエミュレータでMono for Androidアプリを開発するのは非常にストレスがある。エミュレータの起動まではスナップショットを使えば回避できるが、ビルド->転送->実行->ブレーク->ステップ等はとてつもなく遅…

ブラウザコントロールの内部で使用されるIEのバージョンを指定する方法

レジストリでなくては制御出来ない模様。http://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx

SecureString型を使ってみた

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 …

cerファイルからp12ファイルへの変換方法

Appを公開するために作成する公開用証明書。これを異なる別のMac上で使う為に証明書のファイル形式をcerからp12に変換したときの備忘録。必要なのは distribution_identity.cer 公開用証明書 mykey.key 秘密鍵ファイル(上記証明書を作るときに使った鍵ペアの…

メインスレッド以外のスレッドからUIViewにアクセスしてはいけない

基本的なルールすぎて忘れがちだがメインスレッド以外のスレッドからUIViewにアクセスしてはいけない。というわけですっかり忘れていて数時間無駄にしてしまった。 場所はUITextViewに対して文字列を設定する箇所。 Application Outputには以下の様に出力さ…

CALayerのxxxColorプロパティに代入したCGColorがメモリリークしてしまう現象

CALayerクラスのBorderColorやBackgroundColorといったxxxColorプロパティに対してCGColorを代入した時、メモリリークが発生してしまう現象が起きた。以下の様にした時、 layer = CALayer.Create (); layer.BorderColor = new CGColor(1.0f, 1.0f, 1.0f, 1.0…

デフォルトでアンチエイリアスが有効になった?

角丸四角を描画しているところでふとしたことに気がついた。白一色でべた塗りしているところが下の画像のように、 角丸の縁の部分で色が濃くなってしまいなんともキタナイ。以前はこうではなかった。調べると原因はアンチエイリアスが有効になっていることだ…

LionにVNC

MonoTouchで使っているMacをLionにしたところWindowsからUltraVNCで接続できなくなってしまった。正確には接続するんだけどメタル色のログイン画面の背景だけが表示されるだけの状態。 ググると既知の問題の模様。そんな中で確実に接続できる方法を見つける…

MonoTouch v5.1.1betaでデバイスにデプロイできなくなった

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…

ファイルをカスタムコマンドを使ってAppのパッケージに含めるときの注意点

MonoDevelopからデバイスに対するAppのインストールが出来なくなった時の備忘録。プロジェクトに追加したファイル以外のファイルをカスタムコマンドを使ってAppのパッケージに含める時、コンパイルが始まるまでにAppの出力先フォルダに含めておく必要がある。…

Mono for Androidとメモリリークのまとめ

Mono for Androidはそのフレームワーク内のほぼ全てのクラスがIDisposableを持っている。よって.NETの基本的ルールとして生成したインスタンスは明示的にDisposeするべきである。しかしDisposeしてもなおメモリリークするパターンも存在している。それをまと…

Mono for Androidはメモリリークが多すぎる?

Androidエミュレータを使って開発中、ログに GREF has increased to 2001が表示される事が多くなった。 これはJNIのグローバルリファレンス(オブジェクトの管理テーブル)の数が制限値の2000*1を超えたので表示されている。 原因はインスタンス化したBitmapや…

設定->音->入力時バイブレーション 設定値の取得

設定->音->入力時バイブレーション 設定値を取得するサンプルが意外と少ないので備忘録もかねて記録しておく。 int HapticFeedbackEnabled = Android.Provider.Settings.System.GetInt(context.ContentResolver, Android.Provider.Settings.System.HapticFee…

xmlで記述するandroid:button="@null"をコードで書くには

ラジオボタンのカスタマイズで良くあるのが <RadioButton android:text="On" android:textAppearance="?android:attr/textAppearanceSmall" android:button="@null" android:gravity="center" andriud:background="@drawable/custom_radio" /> という感じでandroid:button="@null"を指定することにより本来のラジオボタンのイメージを無効にしてしまう方法。 これをコードから実現するにはSetButtonDrawab…</radiobutton>

カスタムViewをレイアウト用XMLで使うには

Xamarinにも書いてある*1ようにMono for AndroidでカスタムViewをレイアウト用XMLで使うには、作成したclassに特殊なコンストラクタが必要になる。この辺は本家とほぼ同じ。 ちゃんとテンプレートが用意されている。"新規作成->Mono for Android->Android Vi…

左右のフリック操作を検出する

Mono for Androidで左右のフリック操作を検出したかったのでKazzzさんが書かれたサンプルコードを移植してみた。 using Android.Views; public class FlickListener : Java.Lang.Object, View.IOnTouchListener { public enum Direction { Left, Right } pri…

TFS 2010で他人のチェックアウトを取り消す方法

TFS

TFS 2010において他人のチェックアウトを取り消すにはGUIからはできない。 この場合コマンドラインから行う必要がある。さらに手順が面倒くさい。 事前にtf.exeの場所もしくはパスを解決しておこう。 取り消し対象のプロパティをGUIで確認する。 全般タブの"…

Mono for Androidでjava/util/concurrent/CountDownLatchを使えるようにしてみた

モーダルダイアログを実現したくて見つけたJavaのコードサンプルで使っているCountDownLatch。 Mono for Android v1.9ではまだ実装されていなかったので自前で実装してみた。 using System; using Android; using Android.Runtime; namespace Utilty { publi…

追加したリソース(XML)をResource.designer.csに認識させるには

追加したリソース(XML)をResource.designer.csに認識させるには、追加したリソースのオプションを"AndroidResource"にして一度ビルドするとResource.designer.csが更新される。

PopupWindowの外観をDialogのようにする

PopupWindowをそのまま表示すると味気ない黒い背景になってしまう。 一方Dialogを使うと白い罫線枠があったりしてそれっぽくなるのだが、常に画面中央に表示されたりモードレスダイアログとして使うことができない*1。 というわけでPopupWindowの外観をDialo…

AndroidManifest.xmlからmeta-dataを読み込む

AndroidManifest.xmlからmeta-dataを読み込むには本家とほぼ同じようなコードになる。 <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="TestApp"> <application android:label="TestApp" android:icon="@drawable/icon"> </application></manifest>

PNGファイルの最適化

iPhoneやiPad向けにPNGファイルを最適化したほうがパフォーマンスが良いらしい。 この最適化は本来xcodeが自動的に行ってくれるがMonoTouchは行ってくれないので自前で行う必要がある。 とりあえず以下のコマンドラインを使うことで最適化できた。 /Develope…