Kako napraviti modul/biblioteku u Swift bez pomoci package managera i XCode

  • Začetnik teme Začetnik teme bmaxa
  • Datum pokretanja Datum pokretanja

bmaxa

Legenda
Poruka
70.808
Ovo dobro dodje onima koji hoce da znaju kako se radi sa komandne linije samo sa swift kompajlerom.
Elem za pocetak napravi se swift fajl obican nista posebno, kao primer uzeo sam wrapper oko poziva
C f-je.
Swift:
public func FF(_ s:String){
  s.withCString({i in
    print("called FF!")
    f(i)
  })
}
Potom se napravi modul sa :
Kod:
bmaxa@Branimirs-Air mymodule % swiftc -Ounchecked  mymodule.swift   -emit-module -import-objc-header stub.h -I .
ovo -i mu kaze da trazi headere u tekucem direktorijumu tj `.`.
E sad treba napraviti biblioteku.
Kod:
swiftc -Ounchecked -c mymodule.swift -import-objc-header stub.h -o mymodule.o
prvo napravimo .o fajl, potom biblioteku.
Kod:
swiftc -Ounchecked -o mymodule.o stub.o -emit-library
I to je to biblioteka je napravljena:
Kod:
drwxr-xr-x  12 bmaxa  staff    384 Jul 18 17:44 .
drwxr-xr-x   6 bmaxa  staff    192 Jul 18 08:06 ..
-rwxr-xr-x   1 bmaxa  staff  51006 Jul 18 08:16 libmymodule.dylib
-rw-r--r--   1 bmaxa  staff     82 Jul 17 23:35 module.map
-rwxr-xr-x   1 bmaxa  staff  49895 Jul 18 17:44 mymodule.o
-rw-r--r--   1 bmaxa  staff     90 Jul 18 08:15 mymodule.swift
-rw-r--r--   1 bmaxa  staff    380 Jul 18 17:37 mymodule.swiftdoc
-rw-r--r--   1 bmaxa  staff  13192 Jul 18 17:37 mymodule.swiftmodule
-rw-r--r--   1 bmaxa  staff    568 Jul 18 17:37 mymodule.swiftsourceinfo
-rw-r--r--   1 bmaxa  staff     85 Jul 18 07:40 stub.c
-rw-r--r--   1 bmaxa  staff     22 Jul 18 07:32 stub.h
-rw-r--r--   1 bmaxa  staff    744 Jul 18 07:40 stub.o
Potom iskopirati dylib tamo gde hocemo da pravimo exe.
Kod:
swiftc -Ounchecked bridging.swift  -I mymodule  -L . -lmymodule
L . znaci da potrazi biblioteku u tekucem diru kao -I mymodule da include fajlove za modul potrazi u diru mymodule.
i to je to. Jos mozemo sa ldd na linuxu ili sa otool na macOS da proverimo gde trazi lib:
Kod:
bmaxa@Branimirs-Air fileio % otool -L bridging
bridging:
        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
        libmymodule.dylib (compatibility version 0.0.0, current version 0.0.0)

I sad :
Kod:
bmaxa@Branimirs-Air fileio % ./bridging
called FF!
Hello World, Branimir !

a bridging.swift je sad ordinary swift:
Swift:
import mymodule
let hello = "Branimir"
mymodule.FF(hello)

Eto moze sve bez pomagala :P
 

Back
Top