1

今朝 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 世代別ガベージ コレクターを使用 -> 参照カウント拡張機能を使用します。

無効にする (「参照カウント拡張機能を使用する」)と、テスト アプリと実際のアプリの両方をクラッシュさせることなく実行できます。したがって、問題はそこにあるようです。

4

1 に答える 1

2

XamarinStudio4.0.2およびMonoDevelop3.0.6に更新しました

では、MonoDevelop3.0.6をXamarinStudio4.0.2に更新しましたね。残念ながら、これは、MonoTouch/Xamarin.iOSのどのバージョンが以前/現在使用されていたかを正確に教えてくれません。

正確なバージョン情報を取得する最も簡単な方法は、[Xamarin Studio]メニュー、[About Xamarin Studio]項目、[Show Details]ボタンを使用して、バージョン情報をコピーして貼り付けることです([Copy Information]ボタンを使用できます)。

質問を編集してこれを追加していただけますか?

次のInvalidCastExceptionsでアプリがクラッシュします。

構築済みのアセンブリを使用していますか?一部がMonoTouch6.0.x(またはそれ以前)に反対している場合、strongnameの変更(6.2.x)により、2つの異なるものmonotouch.dllがロードされる可能性があり、それらの間にインスタンスをキャストすることはできません。

すべてがソースから再構築されている場合(再コンパイルできないサードパーティの.dllがない場合)、これが発生する場所を正確に示すために、小さなサンプルを作成してみてください(たとえば、アプリの一部を縮小/コメントすることによって)?(可能であれば、ソースを使用して質問を編集するか、バグレポートを提出してください)。

ランタイムターゲットを2.10.12、2.10.11、2.10.9に設定しました

インストールされたシステムモノは、XamarinStudioといくつかのツールを実行するための要件です。ただし、Xamarin.iOSによって構築されたアプリケーションは、Monoがインストールされているシステムに依存しません。IOW Xamarin.iOSには、独自のランタイムライブラリとSDKライブラリ(アセンブリなど)が付属しています。

于 2013-03-20T12:22:13.847 に答える