ปัญหาแปลกๆ ตอน Build ลง iOS ด้วย Unity3d ที่เจอช่วงสองสามวันนี้

ช่วงนี้กำลัง Build เกมลง iOS อยู่ แต่เจอปัญหาแปลกๆ ทำให้ต้องเสียเวลาแก้ไปบ้าง ซึ่งตัว Unity รุ่นที่ใช้กับงานนี้คือรุ่น 5.2.4

Build เป็น XCode Project แต่เปิดไม่ได้ มันบอก “Cannot be parsed” -_-

Strang unity3d bugs

ปัญหาเกิดจาก ตอน Unity เขียนไฟล์ Unity-iPhone.xcodeproj มันไม่เขียนอะไรเลยลงไปในไฟล์ Unity-iPhone.xcodeproj -> project.pbxproj

วิธีแก้ก็คือ Copy ข้อมูลจากในไฟล์ Unity-iPhone.xcodeproj -> project.backup.pbxproj ทั้งหมด ไปใส่ในไฟล์ Unity-iPhone.xcodeproj -> project.pbxproj จบ
โดยขั้นตอนมีดังนี้
1. คลิกขวาที่ไฟล์ Unity-iPhone.xcodeproj เลือก Show Package Contents

Strang unity3d bugs - 02

2. เปิดไฟล์ project.backup.pbxproj ด้วย Text Editor แล้ว Copy ข้อมูลทั้งหมด
3. เปิดไฟล์ project.pbxproj ด้วย Text Editor แล้ววางข้อมูลทั้งหมด ที่ Copy มา

เพียงเท่านี้ก็เปิดไฟล์ Unity-iPhone.xcodeproj ได้แล้ว

Facebook SDK ไม่ถูกรวมด้วยกับตัว XCode Project
ปัญหานี้ก็ทำให้พอใช้ Function ต่างๆ ที่เกี่ยวกับ Facebook แล้ว Crash ไปเลย เพราะมันไม่เจอ Function พวกนั้น
Facebook SDK รุ่นที่ใช้กับงานนี้เป็นรุ่น 6.2.2 รุ่นเก่านิดนึง แต่ก็ยังใช้งานได้ดี (รุ่นใหม่เปลี่ยนแล้วจะได้แก้โค้ดเยอะอยู่เลยยังไม่เปลี่ยน)

วิธีแก้ก็คือรวม Facebook SDK เข้ากับ Project เอง
โดยมีขั้นตอนดังนี้
1. จะทำไม่ทำก็ได้ คือสร้าง Group ที่รวมไฟล์ที่เกี่ยวกับ Facebook เพื่อความเป็นระเบียบ โดย ตัวอย่างจะสร้าง Group ใหม่ใน Group ชื่อ Libraries โดยคลิกขวา แล้วเลือก New Group แล้วตั้งชื่อว่า Facebook

Strang unity3d bugs - 04

2. หลังจาก สร้าง Group แล้ว ก็เพิ่มไฟล์ที่ต้องใช้ โดยคลิกขวา เลือก Add Files to “Unity-iPhone” …

Strang unity3d bugs - 05

โดยไฟล์ที่ต้องรวมเข้ามาได้แก้ไฟล์
- {Unity Project Directory}/Assets/Facebook/Editor/iOS/FacebookSDK/FacebookSDK.a
- {Unity Project Directory}/Assets/Facebook/Editor/iOS/FbUnityInterface.h
- {Unity Project Directory}/Assets/Facebook/Editor/iOS/FbUnityInterface.mm
- {Unity Project Directory}/Assets/Facebook/Scripts/NativeDialogModes.cs
3. ตั้งค่า Type ของไฟล์ NativeDialogModes.cs โดยคลิกเลือกไฟล์แล้วแก้ค่านี้ตรง Identity and Type (ปกติจะอยู่ด้านขวาของโปรแกรม XCode) เป็น C Header

Strang unity3d bugs - 06

4. เพิ่มค่า Header Search Path โดยคลิกที่โปรเจคก่อน

แล้วไปตรงส่วน Build Settings แล้วหาว่า “search paths”

Strang unity3d bugs - 08

แล้วเพิ่มข้อมูลตรง Header Search Path ดังนี้
- “{Unity Project Directory}/Assets/Facebook/Editor/iOS”
- “{Unity Project Directory}/Assets/Facebook/Editor/Scripts”
5. เพิ่มค่า Library Search Path โดยส่วนที่จะไปเพิ่มข้อมูลนี้ก็อยู่ข้างล่างถัดจาก Header Search Path นั่นแหละ ข้อมูลที่ต้องเพิ่มได้แก่
- “{Unity Project Directory}/Assets/Facebook/Editor/iOS/FacebookSDK/”
6. เพิ่ม FbUnityInterface.mm ไปยัง Compile Sources โดยไปตรงส่วน Build Phases (อยู่ขวามือของ Build Settings) แล้วไปตรง Compile Sources ลากไฟล์ FbUnityInterface.mm จาก Group Facebook ที่เพิ่มไว้

Strang unity3d bugs - 09

แล้วเพิ่มค่า Compiler Flags โดยการดับเบิลคลิก แล้วใส่ค่า -fno-objc-arc เข้าไป

Strang unity3d bugs - 10

7. เพิ่ม Facebook SDK.a ไปยัง Link Binary With Libraries ซึ่งอยู่ข้างล่างถัดจาก Compile Sources นั่นแหละ โดยลากไฟล์ Facebook SDK.a มาไฟล์ใส่เหมือนขั้นตอนที่แล้ว

Strang unity3d bugs - 11

ทำทั้งหมดนี้ก็สามารถ Compile และใช้งาน Facebook SDK ได้แล้ว

ปัญหาพวกนี้ไม่เคยเจอตอนใช้ Unity รุ่น 5.2.3 นะ บางทีแก้ปัญหาโดยเปลี่ยนรุ่นกลับไปใช้รุ่นก่อนอาจจะง่ายกว่านี้ก็ได้
แต่ได้แก้ปัญหาพวกนี้เอง ก็ทำให้ได้ความรู้เกี่ยวกับการใช้ XCode มาหน่อยนึงแหละ ^^a