2015-04-14 6 views
6

Sto tentando di includere OpenSSL in un progetto Swift OS X per la convalida della ricevuta.Aggiunta di openSSL al progetto Swift OS X per la convalida della ricevuta

Ho creato con successo i file di intestazione e libreria OpenSSL necessari. Li ho aggiunti al mio progetto, ma in questo modo non è stato richiesto di creare un file di intestazione di bridging. Ho creato manualmente il file di intestazione del bridging con #import per ciascuno dei file di intestazione openssl. Nell'impostazione del progetto, ho impostato l'intestazione del bridging C obiettivo sotto "swift compiler - code generation" nella mia intestazione di bridging. Ho generato i file ans1c per il formato del payload come descritto nella guida alla programmazione della convalida della ricevuta: "Elenco 1-1 della definizione ASN.1 del formato del payload" e li ho aggiunti alla mia intestazione di bridging.

Ottengo numerosi errori di compilazione durante la compilazione, principalmente per i nomi di tipi sconosciuti nei file di intestazione openSSL che avrei pensato sarebbero stati definiti nei file di intestazione ans1c, ma non lo sono. Ricevo anche un errore "Impossibile importare l'intestazione di bridging ... (il mio file di intestazione di bridging)".

Sono a corto di idee e potrebbe dover abbandonare openSSL per la convalida della ricevuta. Se qualcuno sa cosa sto facendo male, o se hai un metodo alternativo per fare la convalida, mi piacerebbe sentirlo. La mia app avrà IAP, quindi sembra che avrei bisogno di un modo per controllare la ricevuta.

+0

Credo di aver isolato il mio problema attuale, ma non so come correggerlo. Ho costruito due progetti bare bones in cui ho importato la libreria e le intestazioni openSSL, un progetto in Swift e l'altro in Objective C. Con la versione C obiettivo posso creare senza errori. Con la versione Swift, la build risulta in più errori del compilatore, la maggior parte dei quali sono nomi di tipi sconosciuti per alcuni dei tipi openSSL. Quando porto i file header nel progetto Swift, non mi viene richiesto di creare un'intestazione di bridging, il che mi rende sospetto che non li sto importando correttamente. – jbaraga

risposta

3

Ho finalmente capito la fonte degli errori del compilatore. XCode è molto schizzinoso su dove si trovano le intestazioni di openssl. Se collego direttamente alla directory di intestazione dal titolo "openssl" ottengo gli errori del compilatore. Se collego alla cartella principale dal titolo "include", nessun errore!

Non capisco questo comportamento, ma almeno ora ho una soluzione. Grazie alle istruzioni su Receigen per adding OpenSSL as a static library, che ho finalmente seguito con precisione, sono stato in grado di scoprire la fonte dell'errore.

+2

Mi sono battuto anche con questo, per tutti i neofiti, risulta che in openssl 1.0.2a è anche necessario regolare il file openssl/rsa.h per disimparare la "I" come definita in complex.h dal cacao/framework di base. Questo può essere fatto inserendo "#undef I" nel file rsa.h, appena sopra "struct rsa_meth_st" – Rien

+0

@jbaraga Sto affrontando lo stesso problema openssl con swift. Per favore condividi la soluzione con me. – vipulk617

+0

È pignolo, ma se segui le istruzioni su Receigen con precisione, dovrebbe funzionare. In caso contrario, puoi provare le istruzioni pubblicate qui: [link] (http://swiftrien.blogspot.com/2015/05/osx-receipt-validation-in-swift-part-1.html). Non ho trovato necessario aggiornare il file openssl/rsa.h, come indicato in queste istruzioni, ma vale la pena provare se si continuano ad avere problemi. – jbaraga

Problemi correlati