Créer un projet qui est linké contre Cocoa et UIKit

colas_colas_ Membre
février 2014 modifié dans Objective-C, Swift, C, C++ #1

Bonjour,


 


Je souhaiterais créer un petit module qui puisse utiliser à  la fois AppKit et UIKit.


 


Le but est de créer des méthodes qui gèrent les couleurs, et que ces méthodes soient utilisables à  la fois pour une appli osx et ios.


 


En gros, ce module contiendrait ce bout de code :



#if TARGET_OS_IPHONE
  #define OSColor UIColor
  #define MakeColor(r, g, b) [UIColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f]
#elif
  #define OSColor NSColor
  #define MakeColor(r, g, b) [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f]
#endif

et ensuite je définirais une catégorie au-dessus de NSColor ou de UIColor à  l'aide de



#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
@interface UIColor (Colours)

#elif TARGET_OS_MAC
#import <AppKit/AppKit.h>
@interface NSColor (Colours)

#endif

J'ai aussi remarqué que je pouvais utiliser ce mot-clé :



+ (instancetype)myBlueColor

Pour faire, je souhaiterais disposer dans le même projet de AppKit et de UIKit.


Est-ce possible ? Ou vais-je devoir "coder à  l'aveugle", c'est-à -dire sans les auto-complétions ?


 


Je me suis inspiré de deux projets : CocoaLumberJack (qui définit OSColor) et Colours (qui utilise instancetype et définit une catégorie au-dessus de NSColor ou UIColor) : cf. https://github.com/bennyguitar/Colours


 


Merci !


 


PS : J'ai essayé différentes méthodes postées sur le web, mais si je commence par créer un projet pour Cocoa, alors je ne pourrai pas ajouter UIKit comme framework.


 


PPS : si vous avez d'autres idées pour faire ce que je souhaite, je suis preneur !!


Réponses

  • CéroceCéroce Membre, Modérateur

    Ce n'est pas le projet qui est linké avec la framework, mais la cible (target).


    Si la cible est une appli OS X, elle sera linkée avec AppKit.


    Si la cible est une appli iOS, elle sera linkée avec UIKit.


     


    P.S.: ça ne sert à  rien de faire les #import <UIKit/UIKit.h> et <AppKit/AppKit.h>, ils sont déjà  inclus dans le .pch.


  • @Céroce, merci. C'est Xcode qui je crois met automatiquement ces #imports.


     


    Finalement, je m'en suis sorti en remplaçant par OSColor partout où j'avais NSColor.


    Voilà  le bon code :



    #if TARGET_OS_IPHONE
    #define OSColor UIColor
    #define MakeColor(r, g, b) [UIColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f]
    #define MakeColorWithAlpha(r, g, b, a) [UIColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:a]
    #define MakeColorFloat(r, g, b) [UIColor colorWithRed:(r) green:(g) blue:(b) alpha:1.0f]
    #define MakeColorWithAlphaFloat(r, g, b, a) [UIColor colorWithRed:(r) green:(g) blue:(b) alpha:a]
    #else
    #define OSColor NSColor
    #define MakeColor(r, g, b) [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f]
    #define MakeColorWithAlpha(r, g, b, a) [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:a]
    #define MakeColorFloat(r, g, b) [NSColor colorWithCalibratedRed:(r) green:(g) blue:(b) alpha:1.0f]
    #define MakeColorWithAlphaFloat(r, g, b, a) [NSColor colorWithCalibratedRed:(r) green:(g) blue:(b) alpha:a]
    #endif
Connectez-vous ou Inscrivez-vous pour répondre.