今朝 Xamarin/Monotouch を更新した後、問題が発生しているようです。
MonoDevelop を 3.06 に更新し、10 日前に最新で安定していたバージョンから (具体的には言えません)、Xamarin Studio を 4.0.2 に更新しました。私は MonoDevelop のみを使用しており、MonoDevelop のバグに遭遇したかどうか疑問に思って、Xamarin Studio を開いたのは今だけです。
現在の MonoTouch のバージョンは次のとおりです。
Xamarin.iOS
バージョン: 6.2.1.201 (エンタープライズ版)
ハッシュ:ed9807c
ブランチ:
ビルド日: 2013-19-03 13:42:59-0400
どちらの IDE でも、シミュレーターでリリース モードまたはデバッグ モードでアプリを実行すると、次の InvalidCastExceptions でアプリがクラッシュします。
System.InvalidCastException: Unable to cast object of type 'MonoTouch.Foundation.NSObject' to type 'MonoTouch.Foundation.NSUserDefaults'.
System.InvalidCastException: Unable to cast object of type 'MonoTouch.Foundation.NSObject' to type 'MonoTouch.Foundation.NSBundle'
これらは、私が失敗すると予想される種類のキャストではありません:-)
いずれにせよ、Xamarin Studio または MonoDevelop のいずれかからビルドおよびインストールすると、アプリは iOS 6.1.2 を搭載した iPhone 4 で正しくコンパイル、転送、および実行されます。
ランタイム ターゲットを 2.10.12、2.10.11、および 2.10.9 に設定しました (メニューのこの新しい [ランタイム ターゲット] メニュー オプションを介して、効果がないことを意図していますが)、アプリが同じようにクラッシュするたびに仕方。
これはすべて、更新前に正しく機能していたコードです (先週、休暇でアイスランドに出かける前に、私が行っている間は誰も何も触れませんでした)。
サードパーティのアセンブリは使用しません。すべてのアセンブリをクリーンアップして再構築しましたが、役に立ちませんでした。小さなテストソリューションで問題を絞り込もうとしています。
更新 1: MonoDevelop でアセンブリのバージョン番号を見ると、次のようになります。
Assembly Version 2.0.5.0, found in /Developer/MonoTouch/usr/lib/mono/2.1
Monotouch の Assemlby バージョンは 0.0.0.0 です。
新しい MonoTouch プロジェクトを作成し、問題のある最初の行をメイン メソッドに追加しました。
public class Application
{
static void Main (string[] args)
{
// My real App crashes on this line with an InvalidCastException:
string s = NSUserDefaults.StandardUserDefaults.StringForKey("Login");
UIApplication.Main (args, null, "AppDelegate");
}
}
これはうまくいきました。
更新 2: テスト アプリのビルド オプションを実際のアプリに合わせて変更した後、同じクラッシュが発生します。ビルドオプションは次のとおりです。
- iPhone ビルド -> 一般 -> リンカー オプション -> すべてのアセンブリをリンク
- iPhone ビルド -> 詳細設定 -> SGen の世代別ガベージ コレクターを使用
- iPhone ビルド -> 詳細設定 -> SGen 世代別ガベージ コレクターを使用 -> 参照カウント拡張機能を使用します。
無効にする (「参照カウント拡張機能を使用する」)と、テスト アプリと実際のアプリの両方をクラッシュさせることなく実行できます。したがって、問題はそこにあるようです。