Xcode : Multi Project in one workspace

Caomus TP
te<h @TDG
Published in
3 min readMay 19, 2019

มาดูการทำ modularize กันครับ สืบเนื่องมาจากการที่ผมได้ติดปัญหาว่าจะทำ Framework ให้อยู่ใน workspace เดียวกับ Project ที่กำลังพัฒนา ซึ่งก่อนหน้านี้ก็ทำอยู่แต่ว่าใช้ในการเขียนผ่าน Cocos Pod ซึ่งค่อนข้างยุ่งยากในการ Setup และด้วยปัญหานี้เองผมก็ได้ไปเจอตัวอ่างที่เป็น modularize และเค้าก็ได้เขียนแนะนำใน blog ขอเค้าไว้เป็นภาษาอังกฤษ ผมจึงอยากจะแชร์เป็นภาษาไทยให้สำหรับใครที่ไม่ค่อยแข็งแรงเรื่องภาษาอย่างเช่นตัวผมให้อ่านง่ายและเข้าใจ แต่ถ้าใครไม่ติดเรื่องภาษาก็เข้าไปอ่านที่ original blog ได้ครับเดี๋ยวผมจะแนบ link ไว้ให้

เอาละ! ~เรามาเริ่มกันเลย

สร้าง Workspace

เราจะเริ่มต้นด้วยการสร้าง Workspace เปล่ามาก่อนครับและวางไว้ใน folder ที่เราต้องการก่อน โดยเลือก menu File > New > Workspace

สร้าง Workspace ขึ้นมาก่อน

เพื่อไม่ให้สับสนเราจะสร้าง folder ชื่อ MultiProjectWorkspace ไว้บน Desktop โดยจะให้เป็นชื่อเดียวกับ Workspace ที่เราสร้างเพื่อไม่สับสนครับ

Workspace ที่เราสร้างจะเป็นไฟล์แบบนี้ครับ

และเมื่อเราเปิด Workspace ขึ้นมาอย่างพึ่งตกใจว่าทำมันมันเป็นพื้นที่เปล่าๆ ไม่มีอะไรเลยนั้นก็เพราะว่าเราจะต้อง Add Project ที่เราจะทำงานใน Workspace เข้าไปเองครับ

เปิด Workspace ที่เราพึ่งสร้างขึ้นมา

หน้าตาของ Workspace ที่เราพึ่งสร้างขึ้นมานั้นมันจะยังคงเป็นว่างๆแบบนี้ครับ

เพิ่ม Project เข้าใน Workspace

ที่นี่เรามาสร้าง Project ที่เราจะทำงานกันครับ จะคล้ายกับการสร้าง workspace ข้างบนเลยครับ โดยเลือก menu File > New > Project

Select -> New -> Project

จากนั้นให้เลือก Project แบบ Single View App

เลือก Single View App แล้วกด Next

จากนั้นให้เราเลือก directory ที่เราได้สร้าง workspace ไว้ก่อนหน้านี้ซึ่งจะอยู่ที่ Folder MultiProjectWorkspace

ขั้นต่อไปให้เราเลือกที่ dropdown Add to :… ด้านล่าง ให้เราเลือก Add to ไปที่ Workspace ที่เราสร้างไว้ ซึ่งที่เราสร้างไว้เป็นชื่อ MultiProjectWorkspace ขั้นตอนนี้ถ้าเรา create ทันที Project นี้จะกลายเป็น Project ใหม่โดยจะไม่ถูกเพิ่มไปใน workspace ที่เราสร้างไว้

เลือก Add to ไปที่ workspace ที่เราเตรียมไว้

หลังจากที่เลือก target Add to แล้วกด create หน้าตาโปรแกรมเราก็จะมี project ที่ workspace เป็นคนเิดมันขึ้นมาดังภาพเลยครับ

Project ที่อยู่ใน workspcae ที่เราสร้าง

เพิ่ม Framework project เข้าใน Workspace

มาถึงช่วงที่เราจะนำ project หรือ framework อื่นเข้าไปใน workspace แล้วครับ เราจะทำเหมือนขั้นตอนเดียวกับที่เราเพิ่ม Project เลยครับ แต่คราวนี้เราจะเพิ่ม Framework แทน

Select -> File -> New -> Project

ให้เราเลือก Project ที่อยู่ใน Group Framework & Library ครับแล้วเลือก Cocoa Touch Framework แล้วกด Next

เลือก Cocoa Touch Framework

เหมือนเดิมเลยครับให้เราเลือก directory ที่เราได้สร้าง workspace ไว้ก่อนหน้า แล้วเลือก dropdown Add toไปที่ Workspace ที่เราสร้างไว้ จากนั้นก็กด Create ได้เลยครับ

เลือก Add to : ไปที่ MultiProjectWorkspace

หลังจากเสร็จเรียบร้อยจะเห็นว่าใน workspace ที่เราสร้างนั้น จะมี 2 Project ที่อยู่ในนี้แล้วครับ 😁

workspace completed

ทดสอบ Run Framework กันครับ

ที่นี่เราจะ new class ชื่อ CaomusSDK.swift ที่เป็น singleton และมีฟังก์ชั่นชื่อ testRun. สังเกตว่าเราจะประกาศ component ให้เป็น public เพื่อให้คนอื่นเรียกใช้งาน CaomusSDK frameworkได้ ดังนั้น access modifier จึงต้องเป็น public

Linking the framework to the app

กลับไปที่แอพของเรา เราจะ setting ให้แอพเราเรียกใช้ framework ที่เราสร้างขึ้นมากันครับ

ก่อนอื่นเราต้อง Link framework กับ Project ของเราก่อน โดยต้องฝังไว้ใน project ของแอปด้วยเพื่อที่จะได้รวมไว้ในแอพเมื่อเรา build test

ในหน้าจอ workspace เราแค่กดปุ่ม +ใน Embedded Binaries เพื่อแสดงหน้าต่าง list framework ขึ้นมา จากนั้นเลือก CaomusSDK.framework

Add framework (+) Embedded Binaries

และเนื่องจากเป็นการฝัง framework ใน project. Xcode จะเพิ่มเข้าไปในส่วนของ Linked Frameworks and Libraries ให้เอง

Run test function กันครับ

เราจะ import CaomusSDK framework และเรียกใช้ฟังก์ชัน testRun ที่เป็น singleton ในฟังก์ชั่น viewDidLoad กันครับลองเรียกผ่านแอปและเราจะเห็นผลลัพธ์ต่อไปนี้ใน consloe log : CaomusSDK กำลังทำงานอยู่ 🤩

CaomusSDK กำลังทำงานอยู่ 🤩

Run test

เป็นอันเสร็จเรียบร้อยครับสำหรับตัวอย่างการทำงานหลาย project ใน workspace เดียว หากมีประโยชน์ก็ช่วงกันกด claps กด shard กด follow กันด้วยนะครับ แต่หากมีอะไรผิดพลายไปก็ comment แนะนำได้ครับผม

🙏 ขอบคุณทุกคนที่อ่านมาจนจบครับ ☺😊

ตัวอย่าง file นี้ครับ : https://github.com/caomus/MultiProject-Xcode

credit blog : https://objectivetidbits.com/multi-project-setups-fee9d235d857 thanks of tutorial

--

--

Caomus TP
te<h @TDG

• IOS Developer • Game Programmer • Unity • C++ • Ionic • Github >> https://github.com/caomus • Site >> https://icaomus.wordpress.com/