voz solo por nada microfono hacer habla funciona frontal desbloquear desactivar deja control activar activado activa objective-c ios frameworks xcode4.2 weak-linking

objective c - solo - ¿Cómo acceder al marco débil vinculado en iOS?



microfono iphone 5s no funciona (4)

Agregue esto a su archivo de encabezado .h:

#import <Twitter/TWTweetComposeViewController.h>

Esto es lo que he usado para mi aplicación:

if ([TWTweetComposeViewController class]) { //can tweet } else { //can''t tweet }

Quiero usar el marco de Twitter para iOS 5, pero ser capaz de ejecutar mi aplicación en un sistema operativo anterior.

Agregué el marco de referencia débil (es decir, establezco el indicador "opcional") en la configuración del objetivo de Xcode 4.2. Base SDK es iOS 5, iOS implementación Target es iOS 3.2.

A continuación, intento usar el marco de Twitter:

#import <Twitter/Twitter.h> ... Class twClass = NSClassFromString(@"TWTweetComposeViewController"); if (!twClass) // Framework not available, older iOS { [self shareWithTwitterPriorIOS5]; return; } if ([TWTweetComposeViewController canSendTweet]) // Check if twitter is setup and reachable { TWTweetComposeViewController* twc = [[TWTweetComposeViewController alloc] init]; // [twc addURL:[NSURL URLWithString:@"http://mail.ru"]]; // [twc addImage:[UIImage imageNamed:@"Some image.png"]] [twc setInitialText:textToShare]; [viewController presentViewController:twc animated:YES completion:^{ // Optional }]; [twc release]; // Assume twc is ARC released or call [twc release]; } else { // Twitter account not configured, inform the user }

Funciona bien en el simulador de iOS 5. Tan pronto como trato de usar un simulador o un dispositivo real con una versión anterior del sistema operativo, aparece el error "Twitter / Twitter.h", archivo no encontrado (en tiempo de compilación). Si elimino la directiva "#import", aparece un par de errores en la clase TWTweetComposeViewController no encontrados.

Si comento todo el código relacionado con Twitter, obtengo el error del enlazador: "ld: framework not found Twitter". El comando Ld causó el error:

Ld /Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Products/Debug-iphoneos/Dictionary.app/Dictionary normal armv6 cd /Developer/WorkShop/XDictionary/trunk setenv IPHONEOS_DEPLOYMENT_TARGET 3.2 setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.2.sdk -L/Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Products/Debug-iphoneos "-L/Developer/WorkShop/XDictionary/trunk/Dictionary/Twitter+OAuth/Libraries & Headers" -F/Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Products/Debug-iphoneos -filelist /Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Intermediates/Dictionary.build/Debug-iphoneos/Dictionary.build/Objects-normal/armv6/Dictionary.LinkFileList -dead_strip -miphoneos-version-min=3.2 -lxml2 -framework AVFoundation -framework UIKit -framework Foundation -framework CoreGraphics -lOAuth -weak_framework Twitter -o /Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Products/Debug-iphoneos/Dictionary.app/Dictionary

¿Qué está mal aquí?


Después de 5 horas, un tonto lector de documentación, cambiando todos los ajustes de objetivos y proyectos, etc. Al menos vengo a la solución. Resulta que es bastante fácil, cuando lo sabes. Probablemente, mi respuesta salvará el día de alguien.

Como puede ver, el destino real del dispositivo ("iPod de mkeskinov") se duplicó. Nunca presto atención a este hecho. Parece que se duplicó por algún error, pero no es así. Si selecciona "Product / Edit Schemes" y abre la lista de destinos (en la parte superior de la ventana), puede ver claramente la diferencia:

Lo que necesito hacer para compilar con éxito la aplicación para el dispositivo real - solo seleccione la segunda opción. Se compilará para iOS 5 y luego se ejecutará en un dispositivo real con sistema operativo 4. La primera opción significa que se compilará para iOS 4, y si tiene alguna referencia a Frameworks, que no se presenta en iOS 4 (no importa, las referencias débiles) o fuerte) - obtienes un error de tiempo de compilación.


En lugar de usar importación, debe hacer referencia a la clase TWTweetComposeViewController utilizando el objeto Class que obtuvo de NSClassFromString (), por ejemplo [twClass canSendTweet] en lugar de [TWTweetComposeViewController canSendTweet].


Tu código probablemente esté bien.

Desea construir su aplicación contra el SDK de iOS5. El binario que produce se ejecutará en versiones anteriores de iOS (siempre que su SDK objetivo sea una versión anterior, como ha indicado).

Su código está comprobando correctamente las capacidades de iOS5 y haciendo lo correcto, y está correctamente vinculado al marco de Twitter. Son estas técnicas las que permiten que su aplicación (desarrollada en base al último SDK) se ejecute sin fallar en las versiones anteriores de iOS.