Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu örnekte Facebook'un POP kitaplığı kullanılır.
Bu bölümde bağlamaya yönelik daha gelişmiş bir yaklaşım ele alınıyor. Burada Apple'ın xcodebuild aracını kullanarak önce POP projesini derleyecek ve ardından Objective Sharpie için girişi el ile çıkaracağız. Bu temelde Objective Sharpie'nin önceki bölümde arka planda neler yaptığını kapsar.
$ git clone https://github.com/facebook/pop.git
Cloning into 'pop'...
_(more git clone output)_
$ cd pop
POP kitaplığının bir Xcode projesi ()pop.xcodeproj olduğundan yalnızca POP oluşturmak için kullanabiliriz xcodebuild . Bu işlem de Objective Sharpie'nin ayrıştırmak için ihtiyaç duyabileceği üst bilgi dosyaları oluşturabilir. Bağlamadan önce derlemenin önemli olmasının nedeni budur. Aracılığıyla xcodebuild derleme yaparken, Objective Sharpie'ye geçirmeyi planladığınız SDK tanımlayıcısını ve mimarisini (ve unutmayın, Objective Sharpie 3.0 genellikle sizin için bunu yapabilir!):
$ xcodebuild -sdk iphoneos9.0 -arch arm64
Build settings from command line:
ARCHS = arm64
SDKROOT = iphoneos8.1
=== BUILD TARGET pop OF PROJECT pop WITH THE DEFAULT CONFIGURATION (Release) ===
...
CpHeader pop/POPAnimationTracer.h build/Headers/POP/POPAnimationTracer.h
cd /Users/aaron/src/sharpie/pop
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Users/aaron/bin::/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/Users/aaron/.rvm/bin"
builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -strip-debug-symbols -strip-tool /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip -resolve-src-symlinks /Users/aaron/src/sharpie/pop/pop/POPAnimationTracer.h /Users/aaron/src/sharpie/pop/build/Headers/POP
...
** BUILD SUCCEEDED **
konsolunda bir parçası xcodebuildolarak çok sayıda derleme bilgisi çıkışı olacaktır. Yukarıda gösterildiği gibi, üst bilgi dosyalarının bir derleme çıktı dizinine kopyalandığı bir "CpHeader" hedefinin çalıştırıldığını görebiliriz. Bu genellikle durumdur ve bağlamayı kolaylaştırır: Yerel kitaplığın derlemesinin bir parçası olarak üst bilgi dosyaları genellikle "genel olarak" kullanılabilir bir konuma kopyalanır ve bu da bağlama için ayrıştırma işlemini kolaylaştırır. Bu durumda POP'un üst bilgi dosyalarının dizinde build/Headers olduğunu biliyoruz.
Artık POP bağlamaya hazırız. MIMARIyle SDK iphoneos8.1 için derlemek istediğimizi arm64 ve önemlediğimiz üst bilgi dosyalarının POP git kullanıma alma altında olduğunu build/Headers biliyoruz. Dizinine build/Headers bakarsak, birkaç üst bilgi dosyası görürüz:
$ ls build/Headers/POP/
POP.h POPAnimationTracer.h POPDefines.h
POPAnimatableProperty.h POPAnimator.h POPGeometry.h
POPAnimation.h POPAnimatorPrivate.h POPLayerExtras.h
POPAnimationEvent.h POPBasicAnimation.h POPPropertyAnimation.h
POPAnimationExtras.h POPCustomAnimation.h POPSpringAnimation.h
POPAnimationPrivate.h POPDecayAnimation.h
'a POP.hbakarsak, kitaplığın diğer dosyalar olan ana üst düzey üst bilgi dosyası olduğunu #importgörebiliriz. Bu nedenle yalnızca Objective Sharpie'ye geçmemiz POP.h gerekiyor ve clang gerisini arka planda yapacak:
$ sharpie bind -output Binding -sdk iphoneos8.1 \
-scope build/Headers build/Headers/POP/POP.h \
-c -Ibuild/Headers -arch arm64
Parsing Native Code...
Binding...
[write] ApiDefinitions.cs
[write] StructsAndEnums.cs
Binding Analysis:
Automated binding is complete, but there are a few APIs which have
been flagged with [Verify] attributes. While the entire binding
should be audited for best API design practices, look more closely
at APIs with the following Verify attribute hints:
ConstantsInterfaceAssociation (1 instance):
There's no fool-proof way to determine with which Objective-C
interface an extern variable declaration may be associated.
Instances of these are bound as [Field] properties in a partial
interface into a near-by concrete interface to produce a more
intuitive API, possibly eliminating the 'Constants' interface
altogether.
StronglyTypedNSArray (4 instances):
A native NSArray* was bound as NSObject[]. It might be possible
to more strongly type the array in the binding based on
expectations set through API documentation (e.g. comments in the
header file) or by examining the array contents through testing.
For example, an NSArray* containing only NSNumber* instances can
be bound as NSNumber[] instead of NSObject[].
MethodToProperty (2 instances):
An Objective-C method was bound as a C# property due to
convention such as taking no parameters and returning a value (
non-void return). Often methods like these should be bound as
properties to surface a nicer API, but sometimes false-positives
can occur and the binding should actually be a method.
Once you have verified a Verify attribute, you should remove it
from the binding source code. The presence of Verify attributes
intentionally cause build failures.
For more information about the Verify attribute hints above,
consult the Objective Sharpie documentation by running 'sharpie
docs' or visiting the following URL:
http://xmn.io/sharpie-docs
Submitting usage data to Xamarin...
Submitted - thank you for helping to improve Objective Sharpie!
Done.
Objective Sharpie'ye bir -scope build/Headers bağımsız değişken sunduğumuzu fark edeceksiniz. C ve Objective-C kitaplıkların bağlamak istediğiniz API'nin değil kitaplığın uygulama ayrıntıları olan diğer üst bilgi dosyalarının olması gerektiğinden -scope #import #include, bağımsız değişken Objective Sharpie'ye dizinin içinde bir dosyada tanımlanmayan API'leri yoksayması -scope gerektiğini söyler.
Bağımsız değişkenin -scope genellikle temiz uygulanan kitaplıklar için isteğe bağlı olduğunu, ancak açıkça sağlamanın bir zararı olmadığını göreceksiniz.
İpucu
Kitaplığın üst bilgileri, örneğin #import <Foundation.h>herhangi bir iOS SDK üst bilgisini içeri aktarıyorsa, kapsamı ayarlamanız gerekir, aksi takdirde Objective Sharpie içeri aktarılan iOS SDK üst bilgisi için bağlama tanımları oluşturur ve bu da bağlama projesini derlerken büyük olasılıkla hatalar oluşturacak büyük bir bağlamaya neden olur.
Ayrıca, değerini belirttik -c -Ibuild/headers. İlk olarak, -c bağımsız değişken Objective Sharpie'ye komut satırı bağımsız değişkenlerini yorumlamayı durdurmasını ve sonraki bağımsız değişkenleri doğrudan clang derleyicisine geçirmesini söyler. Bu nedenle, -Ibuild/Headers clang'ye pop üst bilgilerinin bulunduğu yer olan altında build/Headerseklemeler araması talimatı veren bir clang derleyici bağımsız değişkenidir. Bu bağımsız değişken olmadan clang, ing olan dosyaların POP.h #importyerini bilemez. Objective Sharpie kullanımıyla ilgili neredeyse tüm "sorunlar", clang'ye nelerin geçilmesi gerekenleri anlamak için aşağı doğru kaynar.
Bağlama tamamlanıyor
Objective Sharpie artık ve Binding/StructsAndEnums.cs dosyaları oluşturduBinding/ApiDefinitions.cs.
Bunlar Objective Sharpie'nin bağlamadaki temel ilk geçişidir ve birkaç durumda ihtiyacınız olan tek şey bu olabilir. Ancak yukarıda belirtildiği gibi, araç tarafından otomatik olarak işlenemeyen sorunları düzeltmek için Objective Sharpie tamamlandıktan sonra geliştiricinin genellikle oluşturulan dosyaları el ile değiştirmesi gerekir.
Güncelleştirmeler tamamlandıktan sonra, bu iki dosya artık Mac için Visual Studio bir bağlama projesine eklenebilir veya son bağlamayı btouch oluşturmak için doğrudan veya bmac araçlarına geçirilebilir.
Bağlama işleminin ayrıntılı bir açıklaması için lütfen Tam İzlenecek Yol yönergelerimize bakın.