Utilisation de MySQL dans Cocoa

uocramuocram Membre
15:05 modifié dans Actualités #1
N'en ayant pas trouvé sur le net, voici un tutoriel pour débutants, permettant de découvrir les bases de l'utilisation de l'API C de MySQL dans une application Cocoa.
Cet article évoque :
  • l'installation de MySQL
  • Tester l'installation de MySQL
  • Le paramétrage dans XCode
  • Quelques appels de fonctions de l'API C de MySQL


Pour ceux que cela intéresse : http://ressources.mediabox.fr/tutoriaux/apple/xcode/mysql

Réponses

  • Babyfoot34Babyfoot34 Membre
    15:05 modifié #2
    Merci pour ce Tuto

    Simple mais efficace pour un debutant comme moi.

    Cependant je voulais savoir si le pack SQL que tu charges pour Cocoa au debut de ton Tuto est le meme que je dois charger pour une base SQL avec l'Iphone ?

    J'ai un jeu simple pour apprendre un langage aux personne qui le souhaite. J'ai 50 mots en francais et 50 mots en allemand + 50 fichiers audio en Francais et 50 fichiers audios en Alemand. Dois je utiliser une Base de donnees comme SQL ou dois simplement declarer des variaibles (4 x 50 soit 200) dans mon programme et aller les chercher a chaque fois que le jeu avance ou que l'utilisateur le demande ?

    Merci pour vos reponses

    Christophe
  • wiskywisky Membre
    15:05 modifié #3
    dans 1278461029:

    N'en ayant pas trouvé sur le net, voici un tutoriel pour débutants, permettant de découvrir les bases de l'utilisation de l'API C de MySQL dans une application Cocoa.
    Cet article évoque :
    • l'installation de MySQL
    • Tester l'installation de MySQL
    • Le paramétrage dans XCode
    • Quelques appels de fonctions de l'API C de MySQL


    Pour ceux que cela intéresse : http://ressources.mediabox.fr/tutoriaux/apple/xcode/mysql

    Merci pour ce tutau. C'est un bon début pour moi. Je ne m'y était jamais vraiment mis !
    Petite question : La librairie est inclue dans le programme à  la compilation ou elle n'est que lié ? Faut-il installer la librairie sur le poste de l'utilisateur final ?
  • uocramuocram Membre
    15:05 modifié #4
    MySQL est installé sur le poste en local. Le serveur MySQL est lancé et testé dans le Terminal.
    Les libraries sont linkées dans XCode.
    L'appli en Cocoa ne fait qu'interroger ce serveur et afficher les données retournées par le serveur (au même titre que le Terminal ou php peuvent le faire).
    C'est la situation la plus simple pour découvrir MySQL API C utilisées par Cocoa
  • wiskywisky Membre
    15:05 modifié #5
    Merci !
    Cela complique un peu la tâche de la diffusion si on l'intègre dans un projet.  ;)
  • Amarok2Amarok2 Membre
    15:05 modifié #6
    Bonjour et merci pour le tuto (et le site).
    Je tente pour la 40ème fois environ de me mettre à  xCode, et avec un tuto liant xCode à  MySQL (je suis développeur web, à  l'ancienne école, ceux qui savent de quoi ils parlent... en général :p), je me lance, vérifi que mon mysql local est bien tout comme il faut, mais au milieu du tuto, après les réglages de base, et juste au premier test dans la console, paff!, une erreur... :(

    dyld: Library not loaded: libmysqlclient.16.dylib<br />&nbsp; Referenced from: /Users/niko/Library/Developer/Xcode/DerivedData/CocoaMySQL-fsylukzsrzgbzxeyizvmcnlbbzrw/Build/Products/Debug/CocoaMySQL.app/Contents/MacOS/CocoaMySQL<br />&nbsp; Reason: image not found
    


    J'en appelle à  vos neurones, et quelques pistes...

    Je suis avec xCode 4 maintenant, mais j'avais testé avec le 3.2.3 (ou .5 ?) avec la même erreur.
    Mon MacPro tourne sous SnowLeopard et j'arrive bien à  attaquer MySQL directement via le terminal.

    Merci à  vous !
  • laudemalaudema Membre
    15:05 modifié #7
    Bonjour,

    Le message indique clairement qu'il n'a pas su charger la librairie libmysqlclient.16.dylib.
    D'où la première question (et à  mon niveau probablement la seule) qui me vienne à  l'esprit: comment l'as tu incorporé à  ton projet ?
    Ensuite je n'ai pas trop d'idées, je ne connaissais même pas l'existence de ce dossier : Developer/Xcode/DerivedData dans mon répertoire personnel et à  voir les dossiers qui sont dedans ça concerne seulement les applis que j'ai en cours de debuggage (celles où j'ai mis des points d'arrêt).
    Si tu as bien importé ton framework/library dans ton projet (clic droit sur l'icône du dossier Frameworks dans la colonne de gauche de ton projet Add>Existing Files | Frameworks) tu le retrouveras dans la fenêtre des informations sur ta cible (à  l'intérieur du dossier Targets, sélectionne ton appli puis commande -I ou clic droit encore) onglet "Général".
    Si seulement tu retrouves tout ça sur Xcode 4 que je ne connais pas :(

    Si rien de ça ne fonctionne regardes sur Google si d'autres ont eu le même problème avec cette librairie.

    hth

    PS: il est requis aux nouveaux arrivants d'aller se présenter sur le forum Présentation des membres s'ils le veulent bien. D'aucuns aimeraient une tournée générale de Perrier citron mais ça n'est pas une obligation (tout le monde n'est pas fada du Perrier citron ;)
  • uocramuocram Membre
    15:05 modifié #8
    Dans Xcode 4 :
    Sélectionne le projet (colonne de gauche)
    Sélectionne TARGETS
    Dans Build Settings (pour Debug et Release à  chaque fois) :
    1- Dans Other Linker Flags :
    -lmysqlclient -lm -lz

    2- Dans Header Search Paths :
    /usr/local/mysql/include

    3- Dans Library Search Paths :
    /usr/local/mysql/lib

    Dans ton projet, dans l'entête tu importes :
    #import <mysql.h>

    L'autocompletion pour les librairies mysql fonctionnent déjà  à  ce niveau là .

    Ensuite Go!
  • SonyySonyy Membre
    avril 2011 modifié #9
    Bonjour,

    J'ai le même problème depuis des semaines. J'ai essayer de réinstaller plusieurs fois, de downgrader mysql mais sans succès. Un ami développeur utilise lui une ancienne version de mysql et la tuto fonctionne très bien.

    J'ai fais aussi plusieurs recherchent sur internet et impossible de trouver une solution. D'autres personnes ont le même problème mais le plus souvent c'est pour du ruby on rails.

    Si quelqu'un à  une solution je suis preneur !

    Merci
    <br />warning: Unable to read symbols for libmysqlclient.18.dylib (file not found).<br />warning: Unable to read symbols from &quot;libmysqlclient.18.dylib&quot; (not yet mapped into memory).<br />[Switching to process 872 thread 0x0]<br />dyld: Library not loaded: libmysqlclient.18.dylib<br />&nbsp; Referenced from: /Users/monnomutilisateur/Library/Developer/Xcode/DerivedData/TestAgain-gwnifickriisohgaeaafyaevffny/Build/Products/Debug/TestAgain.app/Contents/MacOS/TestAgain<br />&nbsp; Reason: image not found
    

  • uocramuocram Membre
    15:05 modifié #10
    J'ai installé la dernière version 64 bits de MySQL
    sur Snow Leopard.
    C'est OK avec Xcode4
  • SonyySonyy Membre
    15:05 modifié #11
    Bonjour pour ma part je suis sous xcode 4 et MySQL en 64 bits (version .dmg) et pourtant j'ai cette erreur. Comme dit plus haut j'ai suivis le tuto, j'ai réessayé plusieurs fois l'installation sans succès.

    Merci
  • sekaijinsekaijin Membre
    15:05 modifié #12
    dans 1283763258:

    Merci pour ce Tuto

    Simple mais efficace pour un debutant comme moi.

    Cependant je voulais savoir si le pack SQL que tu charges pour Cocoa au debut de ton Tuto est le meme que je dois charger pour une base SQL avec l'Iphone ?

    J'ai un jeu simple pour apprendre un langage aux personne qui le souhaite. J'ai 50 mots en francais et 50 mots en allemand + 50 fichiers audio en Francais et 50 fichiers audios en Alemand. Dois je utiliser une Base de donnees comme SQL ou dois simplement declarer des variaibles (4 x 50 soit 200) dans mon programme et aller les chercher a chaque fois que le jeu avance ou que l'utilisateur le demande ?

    Merci pour vos reponses

    Christophe


    il existe des lib offrant des API objective-c pour MySQL
    ObjC_mysql
    mysql-cocoa cette dernière est référencé dans la doc de MySQL

    A+JYT
  • SonyySonyy Membre
    15:05 modifié #13
    Bonjour,

    Toujours pas de solution trouvée pour notre soucis ?

    Merci
  • moonfmoonf Membre
    juin 2011 modifié #14
    heu j'ai une question ... :/

    bonjour donc moi c'est Aurelien ou Moonf je suis encore étudiant aprés un BTS en informatique un DUT sur un an toujours dans le développement aujourd'hui en stage je m'attaque a iphone/ipad j'ai pas mal avancé grasse a vous entre-autres mais sur ce tuto un blocage ce pose a moi ...

    dans le tuto il parle du fichier "default_socket" a modifier mais pour le modifier il me faudrait le trouver .. si vous pouviez m'indiquer son emplacement ça pourrait m'aider je pense.

    merci d'avance

    edit: es ce que cette API serait utilisable pour iOS sinon une idée de ce qui pourrait la remplacer a part sqlite ? merci encore
  • uocramuocram Membre
    15:05 modifié #15
    Il faut créer un php.ini à  partir du php.ini.defaults qui se trouve dans /etc
    Et dans ce fichier tu modifies comme suggéré dans le tuto.
    Cela renseigne le chemin du socket pour cette version
    Snow Leopard de mysql.
    Tu peux faire ça avec un éditeur du terminal ou avec
    TexEdit en texte simple.
    Il faut les droits administrateur pour modifier ce genre de fichier.
    Le Plus simple étant de copier php.ini.defaults sur le bureau, de le renommer, de le modifier comme prévu, puis de le glisser dans
    /etc en authentifiant.
    Bonne chance !
  • uocramuocram Membre
    15:05 modifié #16
    Pour ce qui est de iOS, dans le système, salure est déjà  intégré.
    Et encore plus cool, c'est CoreData (basé sur SQLITE)
    mais avec une grosse partie du travail préparée par Apple.
    Cela dit rien empêche d'interroger une base MySQL avec un iPhone.
  • uocramuocram Membre
    15:05 modifié #17
    Salure = SQLITE (correction automatique farfelue sur iPhone)
  • moonfmoonf Membre
    juillet 2011 modifié #18
    merci réponse intéressante

    pour le SQLite il me semble qu'il s'agit d'une bdd intégré a l'application donc une base différente pour chaque "instance" d'application. Alors qu'il me faudrait une bdd pour toutes ces "instance". J'ai déjà  planché sur le sqlite j'en ai surement pas fait le tour non plus d'ailleurs.

    c'est compréhensible?

    merci encore pour ta réponse

    edit:

    je pense avoir un élément de réponse a l'erreur "not load libmysqlclient.XX.dylib"

    après avoir "sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib"
    simplement déplacer cette librairie après réinstallation mon erreur a simplement disparue et le tuto fonctionne nickel donc si ça peut aider... merci encore
  • uocramuocram Membre
    15:05 modifié #19
    Exemple rapide :

    Récupérer une liste de données structurées sous forme de fichier xml, sur plusieurs iPhones, à  partir d'une base sur un serveur (ton imac par exemple).

    1- Mapper (dans ta box ou dans ta time capsule selon config) le port 80 (http) pour envoyer sur l'IP de ton imac.
    2- créer un fichier test.xml, déposé dans /Library/WebServer/Documents :
    &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br />&lt;!DOCTYPE addresses SYSTEM &quot;addresses.dtd&quot;&gt;<br />&lt;addresses&gt;<br />&lt;person&gt;<br />	&lt;nom&gt;De La Vega&lt;/nom&gt;<br />	&lt;prenom&gt;Don Diego&lt;/prenom&gt;<br />	&lt;age&gt;27&lt;/age&gt;<br />&lt;/person&gt;<br />&lt;person&gt;<br />	&lt;nom&gt;De La Vega&lt;/nom&gt;<br />	&lt;prenom&gt;Alessandro&lt;/prenom&gt;<br />	&lt;age&gt;42&lt;/age&gt;<br />&lt;/person&gt;<br />&lt;person&gt;<br />	&lt;nom&gt;Tornado&lt;/nom&gt;<br />	&lt;prenom&gt;&lt;/prenom&gt;<br />	&lt;age&gt;8&lt;/age&gt;<br />&lt;/person&gt;<br />&lt;/addresses&gt;
    

    3- activer le partage Web dans les préférences
    4- retrouver l'adresse de ta box ou mieux obtenir une adresse dynamique chez dyndns.org par exemple
    5- dans l'iPhone, dans le navigateur, appelle :
    <br />http://monadressedynamique.dyndns.org/test.xml
    

    tu obtiens le contenu de ton fichier (image 1)
    6- dans ton appli iPhone, tu appelle cette adresse :
    <br />	NSURLRequest	*request;<br />	request = [NSURLRequest requestWithURL:[NSURL URLWithString:@&quot;http://monadressedynamique.dyndns.org/test.xml&quot;]<br />							&nbsp;  cachePolicy:NSURLRequestUseProtocolCachePolicy<br />						&nbsp;  timeoutInterval:30.0];<br />	<br />	// Create the connection<br />	NSURLConnection	*connection;<br />	connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];<br />
    


    ensuite tu peux utiliser la connection pour parser le fichier (NSURLConnection, NSXMLParser) et remplir une UITableView (image 2)
    7- Pas suivant : ce fichier xml peut être produit par une base sqlite, mysql, etc..., à  qui tu as envoyé une requête. Et là , nous entrons dans les Web-Services : bonne route !
  • Bonjour,


     


    Désolé de déterrer ce sujet :)


    Le tutoriel de 2010 fonctionne parfaitement avec XCode 6 et Objective-C.


     


    Actuellement, je tente de faire la même manipulation sous SWIFT, le nouveau language d'apple.


    Jusque la, tout se passe correctement pour mettre en place le bridge entre Obj-C et Swift, je n'ai d'ailleurs aucune erreur de compilation.


     


    Mon soucis en fait se trouve dans l'initialisation de la variable "mysql" afin de rester au plus proche du tuto.


    Cette dernière fait planter les fonctions mysql_*, sauf le mysql_init.


     


    Voici mon code actuel :



    var mysql: UnsafeMutablePointer<MYSQL> = nil
    let dbhost = "localhost"
    let dbuser = "root"
    let dbpass = ""
    let dbname = "ma_db"

    mysql_init(mysql)
    mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, "2")

    var connectMysql = mysql_real_connect(mysql, dbhost, dbuser, dbpass, dbname, 0, "", 0)

    Si quelqu'un aurait une piste pour débloquer cela :)


     


    Merci d'avance


Connectez-vous ou Inscrivez-vous pour répondre.