Roppongi.swift #3で発表してきた内容です。 Swift Package Managerで画像を生成する事にトライしました。
Make!with SPMRoppongi.swift #3© fromkk 2018 1
View Slide
Who is me?Kazuya UeokaiOS application engineer inTimers inc.Twitter: @fromkkGithub: fromkkQiita: fromkk© fromkk 2018 2
લఏ• macOS High Sierra• Xcode 9.3© fromkk 2018 3
ݕ౼ͨ͠πʔϧ• Imagemagick• GD Graphics Library© fromkk 2018 4
ࠓճ GD Λར༻© fromkk 2018 5
ԿނAppKitΘͳ͍ͷ͔• GDͳΒLinux͔ΒͰར༻ग़དྷΔҝ© fromkk 2018 6
GDͷΠϯετʔϧbrew install gd© fromkk 2018 7
Swift͔ΒCݴޠͷϥΠϒϥϦΛར༻͢Δ© fromkk 2018 8
module.modulemap Λ࡞mkdir ./GD && cd $_touch module.modulemap© fromkk 2018 9
module.modulemap ༰module GD [system] {header "/usr/local/include/gd.h"header "/usr/local/include/gdfontt.h"header "/usr/local/include/gdfonts.h"header "/usr/local/include/gdfontl.h"header "/usr/local/include/gdfontg.h"header "/usr/local/include/gdfontmb.h"link "gd"export *}© fromkk 2018 10
ಉ͡֊ʹ Package.swift Λ࡞import PackageDescriptionlet package = Package(name: "GD",pkgConfig: "gdlib",providers: [.brew(["gd"])])© fromkk 2018 11
GitͰλά͚git init .git add .git commit -m "Initial commit"git tag 0.0.1 -m "Initial commit"© fromkk 2018 12
ϓϩδΣΫτΛ࡞cd ../ && mkdir ./MyProject && cd $_swift package init --type executable© fromkk 2018 13
Package.swift Λฤूimport PackageDescriptionlet package = Package(name: "MyProject",dependencies: [.package(url: "../GD", from: "0.0.1"),],targets: [.target(name: "MyProject",dependencies: []),])© fromkk 2018 14
ҰϏϧυ͢Δswift build↓Fetching /PATH/TO/GDCloning /PATH/TO/GDResolving /PATH/TO/GD at 0.0.1Compile Swift Module 'MyProject' (1 sources)Linking ./.build/x86_64-apple-macosx10.10/debug/MyProjectGD ͕ϑΣον͞ΕͯͪΌΜͱϏϧυ͞Ε͍ͯΔࣄΛ֬ೝ© fromkk 2018 15
XcodeprojΛ࡞swift package generate-xcodeproj© fromkk 2018 16
ϑΥϧμߏtree ..├── GD│ ├── Package.swift│ └── module.modulemap└── MyProject├── MyProject.xcodeproj│ ├── project.pbxproj│ ├── project.xcworkspace│ │ ├── contents.xcworkspacedata│ │ ├── xcshareddata│ │ │ └── IDEWorkspaceChecks.plist│ │ └── xcuserdata│ │ └── fromkk.xcuserdatad│ │ └── UserInterfaceState.xcuserstate│ ├── xcshareddata│ │ └── xcschemes│ │ ├── MyProject-Package.xcscheme│ │ └── xcschememanagement.plist│ └── xcuserdata│ └── fromkk.xcuserdatad│ └── xcschemes│ └── xcschememanagement.plist├── Package.resolved├── Package.swift├── README.md├── Sources│ └── MyProject│ └── main.swift└── Tests© fromkk 2018 17
GDͷجૅ© fromkk 2018 18
ը૾৽ن࡞import GDlet width: Int32 = 640let height: Int32 = 480let image = gdImageCreateTrueColor(width, height)© fromkk 2018 19
ը૾อଘimport GDlet handler = fopen("path/to/image.png", "wb")defer { fclose(handler) }gdImagePng(image, handler)© fromkk 2018 20
ը૾߹import GDlet file = fopen("copy/image/path.png", "rb")defer { fclose(file) }let copyImage = gdImageCreateFromPng(file)gdImageCopy(image, copyImage, dstX, dstY, srcX, srcY, width, height)© fromkk 2018 21
จࣈྻΛॻ͖ࠐΉimport GDlet blackColor = gdImageColorAllocate(image, 0, 0, 0)defer { gdImageColorDeallocate(image, blackColor) }let text = UnsafeMutablePointer(mutating: "hogehoge")gdImageString(image, gdFontGetSmall(), x, y, text, blackColor)© fromkk 2018 22
࡞ͬͯΈͨπʔϧhttps://github.com/fromkk/TestSummariesXCTestͷUIςετͷ݁ՌΛΠΠײ͡Ͱݟ͍ͨ(Qiita)Πϯετʔϧํ๏brew install fromkk/TestSummaries/testsummaries© fromkk 2018 23
Demo© fromkk 2018 24
݁Ռ© fromkk 2018 25
·ͱΊ• XCTestͰࡱͬͨεΫγϣΛը૾ʹ·ͱΊͯνʔϜʹڞ༗ग़དྷΔ༷ʹ͠·ͨ͠• Homebrew͔Β୭ͰΠϯετʔϧग़དྷ·͢• ·ͩ·ͩաڈͷࢿ࢈Λ׆༻͢ΔࣄͰศརͳπʔϧ࡞ΕΔ© fromkk 2018 26
PR 1© fromkk 2018 27
© fromkk 2018 28
© fromkk 2018 29
© fromkk 2018 30
PR 2© fromkk 2018 31
https://pre-wwdc.connpass.com/event/83346/© fromkk 2018 32
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠© fromkk 2018 33