# Compilation cocoa pour pc



## band22 (3 Mai 2012)

Bonjour 

Voila je suis sur mac (comme tout le monde ici je suppose  ) est j'aimerais me lancer dans l'objectif c et cocoa (j'ai appris le c++ donc ça devrait le faire à ce niveau là).
Le problème c'est que j'aimerais développé mon app sur mac mais avoir la possibilité de la compilé sur pc (et oui les pc sont encore trop pour être oublié  ).

J'ai vu sur google des articles datant de 2008 qui parlaient de librairies mais je n'est rien trouvé de bien récent là dessus.

Pourriez vous me donnez un coups de main ? 

Merci d'avance 
Cordialement


----------



## tatouille (4 Mai 2012)

cocotron / mingw 

http://code.google.com/p/freequartz


----------



## ntx (4 Mai 2012)

Vouloir faire de l'Obj-C/Cocoa sur Windows est à peu près aussi stupide que vouloir faire du C#/.Net sur Mac OSX. 

Si tu veux faire du cross-plate-forme, choisis une techno faite pour cela. (Qt, wxWidget, Java, ...)


----------



## Larme (6 Mai 2012)

ntx a dit:


> vouloir faire de l'obj-c/cocoa sur windows est à peu près aussi stupide que vouloir faire du c#/.net sur mac osx. :d
> 
> si tu veux faire du cross-plate-forme, choisis une techno faite pour cela. (qt, wxwidget, java, ...)



+1 :°)


----------



## MetalOS (7 Mai 2012)

Belle initiative d'essayer band22. Moi je programme en basic sur Mac, Linux et Windows.

Bien sur chaque plateforme à ses propres api et je te suggère un autre langage que Objective C qui reste uniquement compatible Mac si je ne me trompe pas. 

D'autre langage basic ou plus évolué sont multi plateforme et il suffit d'appeler les api du système dans ton code. C'est un peut plus compliqué que d'utiliser le langage de prédilection mais plus gratifiant à mon goût.


----------



## ntx (7 Mai 2012)

MetalOS a dit:


> Bien sur chaque plateforme à ses propres api et je te suggère un autre langage que Objective C qui reste uniquement compatible Mac si je ne me trompe pas.


Et ben si, tu te trompes : ce n'est pas l'Obj-C qui est spécifique à Mac OSX, mais Cocoa :rateau:


----------



## Lio70 (7 Mai 2012)

Le Basic est un langage dont Microsoft elle-meme essaye de se debarrasser au profit de C# alors je ne vois pas l'interet de programmer encore en Basic en 2012. C'est obsolete.

Pour du cross-platform facile incluant la plateforme Mac, et sans produire d'horreur a priori, autant choisir C++ que tu connais deja apparemment. Cela te permettra d'utiliser Xcode et de respecter le framework Cocoa. Il faudra que tu retravailles un peu ton projet sur Windows et Linux mais c'est le prix d'un developpement cross-platform valable.

Objective-C n'est pas reserve qu'a OSX/iOS mais a part Solaris, question portage, on ne va pas tres loin. Il existe bien des outils permettant de le tordre dans tous les sens mais ca devient vite l'ile du Dr Moreau.

Java est une horreur sur toutes les plateformes. C'est un langage invente pour rassurer les chefs de projet en chaussettes blanches.


----------



## MetalOS (8 Mai 2012)

GNUstep qui est une implémentation libre d'OpenStep pourrait faire l'affaire.

Des dérivée du langage basic ou ce rapprochant de sa syntaxe il y en existe plein qui sont privilégié dans certain projet par rapport au C, C++ et ses dérivés. Même en 2012.

Voici une capture d'écran d'un jeux réalisé avec un pseudo langage basic

http://www.dracaena-studio.com/arkeos/images/screen/Arkeos_Chronicle_alpha0.29.jpg


----------



## tatouille (8 Mai 2012)

http://www.cocotron.org/Info/?path=Info


----------



## ntx (8 Mai 2012)

Le problèmes avec ces adaptation "libres" de Cocoa, c'est qu'au court du temps elles accumulent des wagons de retard. Tu vas pondre une application Mac qui sous 10.7 semblera fonctionner comme une application écrite pour 10.2 ou 10.3.

Quant à Java, il est vrai que personne n'a jamais réussi à fournir des méthodes valables pour faire des IHM, ce qui est très handicapant pour les parties client. Mais pour le reste, je le trouve plutôt agréable pour travailler, surtout maintenant que j'ai vu la lourdeur de C# sur de nombreux aspects. :rateau: Peut être un jour un petit XAML à la sauce Java.


----------



## tatouille (8 Mai 2012)

cocotron marche pas mal, j'ecris/clone les classes et API manquantes quand c'est necessaire, j'assure 100% de compatibilité sur mes frameworks de base sans trop de tweaks, chose qui ne mettait jamais arrivé exemple pas de CIColor (void ci-dessous) au lieu de merdouiller toutes mes classes qui l'utilisent, j'ai aussi cloner le systemconfiguration framework en utilisant bonjour quand tu as l'esprit lego de cocoa c'est assez rapide (3 jours dans ce cas, aussi CFNetwork en utilisant libcurl comme backend) et plus t'avance plus c'est rapide les pieces manquantes sont ridicules j'ai aussi donné pas mal de code a cocotron, si tous les devs le fesaient ca serait pas mal car tu y tires un gros avantage pour porter tes apps, tu arretes de jeter de l'argent par les fenetres, plus mingw qui offre une grosse partie du layer posix et la lib win32 pthread de redhat je peux te dire que les tweaks et wrapper ont pratiquement disparues de mon code (j'utilise aussi boost) et ca gere les xib tu peux tout faire depuis le mac.


```
#import "TAT+CIColor.h"

#if defined(TAT_TARGET_COMPAT)

@implementation CIColor 

#pragma mark -
#pragma mark Memory management

- (void)dealloc
{
	if (TATCIC_cgColor) {
		CGColorRelease(TATCIC_cgColor);
	}
	[super dealloc];
}

#pragma mark -
#pragma mark Constructor

+ (CIColor *)colorWithCGColor:(CGColorRef)cgColor
{
	return [[[self alloc] initWithCGColor:cgColor] autorelease];
}

+ (CIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue
{
	CGFloat components[4] = {red, green, blue, 1.0};
	CGColorRef cgColor = CGColorCreate(CGColorSpaceCreateDeviceRGB(), components);
	CIColor * result = [self colorWithCGColor:cgColor];
	CGColorRelease(cgColor);
	return result;
}

+ (CIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
{
	CGFloat components[4] = {red, green, blue, alpha};
	CGColorRef cgColor = CGColorCreate(CGColorSpaceCreateDeviceRGB(), components);
	CIColor * result = [self colorWithCGColor:cgColor];
	CGColorRelease(cgColor);
	return result;
}

#pragma mark -
#pragma mark Instance Constructor

- (id)initWithCGColor:(CGColorRef)cgColor
{
	if ((self = [super init])) {
		if (!cgColor) {
			CGFloat components[4] = {.0, .0, .0, .0};
			cgColor = CGColorCreate(CGColorSpaceCreateDeviceRGB(), components);
		} else {
			TATCIC_cgColor = CGColorRetain(cgColor);
		}
	}
	return self;
}

#pragma mark -
#pragma mark Instance Method

- (size_t)numberOfComponents
{
	return CGColorGetNumberOfComponents(TATCIC_cgColor);
}

- (CGColorSpaceRef)colorSpace
{
	return CGColorGetColorSpace(TATCIC_cgColor);
}

- (const CGFloat *)components
{
	return CGColorGetComponents(TATCIC_cgColor);
}

- (CGFloat)red
{
	return CGColorGetComponents(TATCIC_cgColor)[0];
}

- (CGFloat)green
{
	return CGColorGetComponents(TATCIC_cgColor)[1];
}

- (CGFloat)blue
{
	return CGColorGetComponents(TATCIC_cgColor)[2];
}

- (CGFloat)alpha
{
	return CGColorGetComponents(TATCIC_cgColor)[3];
}

@end

#else

__TAT_MAKE_SYMBOL_STUB(NO_COMPAT_CIColor)

#endif /* TAT_TARGET_COMPAT */

/* EOF */
```


----------



## ntx (8 Mai 2012)

Bref, en réécrivant tout ce qui manque, ça marche pas mal


----------



## tatouille (8 Mai 2012)

bah oui mais il manque que tres peu, quand tu es dans un rapport 90/10% c'est toujours mieux qu'un rapport 1/99% de plus toutes les licenses et l'esprit c'est de pouvoir faire du logiciel commercial.


----------



## ntx (8 Mai 2012)

Et ça a quelle tête une application "Cocotron" sur Windows ? Tu aurais une copie d'écran à nous montrer ? Je suis curieux de voir si on retrouve une touche de Cocoa.


----------

