問題タブ [weak-linking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - iOS での弱いリンクのシンボルのテストが期待どおりに機能しない
OS の新しいバージョンで導入されたシンボルの存在をテストしようとすると、奇妙な問題が発生します。弱リンクシンボルの使用に関するAppleのガイドラインに従います。
外部 (extern) 定数または通知名の可用性を、そのアドレス (シンボルの生の名前ではなく) を NULL または nil と明示的に比較することによって確認します。
この問題を再現するために、デフォルトのコンパイラ (Apple LLVM コンパイラ 4.1) を使用して、最新の Xcode 4.5.2 で最新の iOS 6 SDK を使用しています。Social フレームワーク (iOS 6 以降でのみ使用可能) を弱リンクしました。そして、このコードを iOS 5.1 で実行します (展開ターゲットは 6 未満です)。
出力は次のとおりです。
つまり、式&SLServiceTypeFacebook
が値 0 に評価されることを実行時に検証できます。ただし、if
この式をテストするステートメントは、それが true であるかのように扱います。
更新:この質問 から、この回避策は最適化なしでは機能しますが、最適化では機能しないことがわかりました。
更新: この問題は UIKit シンボルには存在しないようです。iOS 4.3 で以下を実行します。
出力は次のとおりです。
違いは、UIKit シンボルのNS_AVAILABLE_IOS()
横にマクロがあるため、コンパイラがそれを正しく処理するということだと思います。ソーシャル フレームワーク シンボルの場合、ソーシャル フレームワークNS_AVAILABLE_IOS()
全体自体は iOS 6 以降でしか利用できないため、マクロはありません (つまり、シンボルはフレームワークのバージョン以降で利用できるので、これは必要ないと思います)。大きい?); しかし、コンパイラはシンボルを正しく処理しません。
objective-c - コンパイル時に利用できないobjcのクラスから継承できますか?
私はiOS6で導入されたものから継承したコードを持っておりUIActivity
、Xcode 4.5で問題なくコンパイルされ、iOS 6以前のバージョンで問題なく動作します(実行時にクラスの可用性を検出します)。ただし、このコードをSDKにクラスが含まれていないXcode 4.4でコンパイルすることは可能ですか?UIActivity
UIActivityを前方宣言すると、メソッドが呼び出され、コンパイラがクラスがすでに継承ツリーのルートにあることを警告dealloc
するため、メソッドはコンパイルされません。super
たぶん、このクラスをローカルで定義したプロキシクラスから継承させ、実行時になんらかの方法でスウィズルして、コンパイル時に適切に定義されたかのようにインスタンス化する方法がありますか?これの目的は、Xcode 4.4でコードをコンパイルし、そのファントムクラスを使用してiOS6でバイナリを実行することです。
定義を使用して、サブクラスがXcode 4.4以前でまったくコンパイルされないようにすることができますが、それは、iOS6を実行しているデバイスで機能を使用できないことを意味します。
ios - MonoTouchで(メソッドではなく)iOSクラスが利用可能かどうかを確認する
MonoTouchは、iOSバージョン間でメソッドの可用性をチェックするためのRespondsToSelectorメソッドを公開します。
ただし、クラスの可用性について同様のチェックを実行する方法がわからないようです。
Appleは、iOS 4.2以降では、必要なクラスの静的class
セレクターにアクセスする必要があることをここに文書化しています。例えば:
しかし、それは明らかにされていないようです。これをMTに実装するには、すべてのMTタイプに静的プロパティを明示的にマッピングする必要があるという点で、これは前の質問と似ていると思います。Class
だから私の質問は、iOS4.2以前の古いテクニックを使うべきかということだと思います。すなわち:
私が思うに、これは次のようにマッピングされます。
または、メッセージングで使用可能な相互運用メソッドを使用してセレクターを手動で呼び出しますか?
または私が見つけていない他のアプローチ?
ios - 「ファイルが見つかりません」エラーの原因となる脆弱なリンク フレームワーク
Social.h
とAccounts.h
フレームワークを使用するアプリを構築しています。
両方のフレームワークを として設定していoptional
ます。私は自分のBase SDK
セットを次の6.0
ようにiOS Deployment Target
設定しました5.0
を実行している iPhone にアプリをビルドすると6.0
、すべて正常に動作します。を実行している iPhone シミュレーターをビルドすると、次の5.0
ようなエラーがSocial/Social.h file not found
表示されます (Accounts.h ではこのエラーが発生しません。これは奇妙に思えます。すべてかゼロかだと思います)。
ios - フレームワークを「弱いリンク」とはどういう意味ですか?
Xcode では、フレームワークを「必須」ではなく「オプション」に設定できます。これは、フレームワークが弱いリンクであることを意味します。
それは、フレームワークがどこかにインポートされたときにのみバンドルに含まれることを意味しますか?
プライベート APIを使用するいくつかのデバッグ フレームワークを弱いリンクにしたいのですが、それらを App Store ビルドに表示したくありません。
macos - -weak_framework リンカー引数が i686-apple-darwin11-llvm-gcc-4.2 で認識されない
Mac OS X (10.8.2、Darwin Kernel バージョン 12.2.1) のセキュリティ フレームワークに弱リンクしようとしています。リンカが「-weak_framework」タグを認識していないようです。
これは私が得るリンカエラーです -
私が興味深いと思ったのは (したがって、「-weak_framework」タグが認識されないと私が信じる理由)、「-weak_framework」を「-thisisgarbage」に変更しても、同じエラーが発生することです。
私はAntビルドスクリプトを実行しているので、これがそこにあるものです-
どんな入力でも大歓迎です。
c++ - 条件付きの弱いリンクされたシンボルの変更/再宣言
次の弱くリンクされた宣言があります。
問題は、オペレーティング システムによって、シンボルが定義されている場合と定義されていない場合があることです。
したがって、それを使用するとfunc(symbolName);
、null の逆参照を試みているため、シグナル 11 クラッシュが発生します。と尋ねることもできますif(&symbolName != NULL) { func(symbolName); }
が、この記号を使用しているすべての人がこの質問をしたことを覚えておく必要があり、最適ではありません。
このシンボルを条件付きで変更または再宣言する魔法の魔法を探していますが、利用できない場合にのみ、動作するデフォルト値を設定しますfunc
。
これは醜い解決策であり、推奨されないことを理解しています。この時点で、それを行う方法があるかどうかを知りたいだけです。