พัฒนาและแจกจ่ายแอพ iOS โดยไม่ต้องใช้ Mac ด้วย Flutter

เผยแพร่แล้ว: 2019-08-23

หมายเหตุจากบรรณาธิการ: ที่ Miquido เราสนับสนุนชุมชนของคนรัก Flutter และเรายินดีเสมอที่จะมีส่วนร่วมในการแบ่งปันความรู้ในเครือข่าย Flutter วันนี้ขอนำเสนอบทความจาก Codemagic ที่กล่าวถึงหัวข้อการพัฒนาแอพ iOS ด้วย Flutter และ… โดยไม่ต้องใช้อุปกรณ์ macOS สนุกกับมันทุกชิ้น!


ส่วนใหญ่แล้ว แอพ iOS ได้รับการพัฒนาและแจกจ่ายจากเครื่อง macOS เป็นการยากที่จะจินตนาการถึงการพัฒนาแอพสำหรับแพลตฟอร์ม iOS ที่ไม่มี macOS อย่างไรก็ตาม ด้วยการผสมผสานระหว่าง Flutter และ Codemagic คุณสามารถพัฒนาและแจกจ่ายแอพ iOS โดยไม่ต้องใช้ macOS ในโพสต์ที่แล้ว เราได้อธิบายขั้นตอนการเซ็นโค้ดแอป iOS โดยไม่ต้องใช้ Mac ในโพสต์นี้ เราจะกล่าวถึงรายละเอียดเกี่ยวกับขั้นตอนการพัฒนาแอพ Flutter บน Linux และการใช้การเซ็นชื่อโค้ดแบบกำหนดเอง/ด้วยตนเองด้วย Codemagic เพื่อให้สามารถควบคุมการเซ็นชื่อแอปบนตัวอย่างแอพ Comagic-Demo ได้อย่างเต็มที่

การพัฒนาแอพ Flutter บน Linux

Flutter เป็นเฟรมเวิร์กการพัฒนาแอปพลิเคชันมือถือข้ามแพลตฟอร์มที่ช่วยให้สามารถพัฒนาแอป iOS และ Android จากซอร์สโค้ดเดียวกันได้ อย่างไรก็ตาม เฟรมเวิร์กดั้งเดิมของ Apple ที่ใช้สำหรับการพัฒนาแอป iOS ไม่สามารถคอมไพล์บนแพลตฟอร์มอื่น เช่น Linux หรือ Windows ส่วนประกอบ iOS ดั้งเดิมต้องใช้ macOS หรือดาร์วินในการพัฒนาและแจกจ่ายแอพ iOS อย่างไรก็ตาม เทคโนโลยีอย่าง Flutter ช่วยให้เราพัฒนาแอปข้ามแพลตฟอร์มบน Linux หรือ Windows จากนั้นเราจะเผยแพร่แอปไปยัง Google Play Store หรือ Apple App Store โดยใช้โซลูชัน Codemagic CI/CD

รับแอพ Flutter บน Linux

แอป Android สามารถสร้าง ทดสอบ และเผยแพร่ได้จากแพลตฟอร์ม Linux เราสามารถใช้ประโยชน์จากคุณสมบัติ Android นี้เพื่อเปิดใช้งานการพัฒนาแอพ Flutter บน Linux แอป Flutter ของเรามีชื่อว่า Comagic-Demo เราจะใช้แอปนั้นเพื่อแสดงวิธีสร้างสำหรับ Android และ iOS บน Linux อย่างไรก็ตาม โปรดจำไว้ว่า เราสามารถพัฒนาบน Android บน Linux เท่านั้น ไม่ใช่ iOS เราจะยังคงได้รับแอป iOS ที่สามารถปรับใช้กับ App Store ได้ในขณะที่พัฒนาแอป Android บน Linux เราสามารถนำ Comagic-Demo ไปยัง Linux ได้ด้วยวิธีต่างๆ

รับเครื่อง Linux

หากคุณมีคอมพิวเตอร์ที่ติดตั้ง Linux อยู่แล้ว กระบวนการทั้งหมดก็เป็นเรื่องง่าย คุณเพียงแค่ต้องติดตั้ง Android SDK และ Flutter บนเครื่อง Linux เมื่อเราโคลนแอป Comagic-Demo เราก็สามารถเริ่มทำงานได้ทันที

สร้างคอนเทนเนอร์ Docker

อีกวิธีในการรับแอพ Flutter บน Linux คือการใช้ Docker หากคุณคุ้นเคยกับระบบนิเวศของ Docker คุณสามารถสร้าง Dockerfile ที่มี Android SDK และ Flutter ติดตั้งอยู่ มี Android Dockerfiles มากมายบน Dockerhub เราเพียงแค่ต้องขยายภาพเหล่านั้นด้วย Flutter SDK มาสร้าง Dockerfile แบบง่าย ๆ ที่ขยายตัวอย่างอิมเมจ Android docker ที่นี่เพื่อรับสภาพแวดล้อม Android และ Flutter ลงในคอนเทนเนอร์ Docker Dockerfile ควรคัดลอกแอปลงในคอนเทนเนอร์และเรียกใช้สภาพแวดล้อม Flutter Android ตัวอย่าง Dockerfile สำหรับ Comagic-Demo จะมีลักษณะดังนี้:

 จาก runmymind/docker-android-sdk
เรียกใช้ mkdir /codemagic-demo
WORKDIR /codemagic-สาธิต
เพิ่ม . /codemagic-demo
เรียกใช้ apt-get อัปเดต && \
    apt-get install -y lcov git-core curl เปิดเครื่องรูด && \
    โคลน git https://github.com/flutter/flutter.git && \
    /กระพือ/bin/หมอกระพือ && \
    apt-get remove -y curl เปิดเครื่องรูด && \
    apt autoremove -y && \
    rm -rf /var/lib/apt/lists/*
ENV PATH $ PATH:/flutter/bin/cache/dart-sdk/bin:/flutter/bin
RUN หมอกระพือ

ข้อมูลโค้ดนี้ใช้เพื่อจุดประสงค์ในการอธิบายเท่านั้น แต่คุณสามารถปรับแต่ง Dockerfile ได้ตามความต้องการของคุณ เมื่อคุณติดตั้ง Dockerfile และ Docker แล้ว คุณสามารถดาวน์โหลดแอป Codemagic ได้โดยใช้ Docker

 $ docker build -t codemagic-demo
$ docker run --name codemagic-demo

เมื่อเรารันคำสั่งเหล่านี้แล้ว เราจะให้คอนเทนเนอร์ Docker ทำงานด้วยสภาพแวดล้อม Flutter

แอพ Dockerising Futter จะเป็นหัวข้อที่แตกต่างออกไป และเราจะกล่าวถึงรายละเอียดในโพสต์ในอนาคต

การสร้างแอสเซทการเซ็นโค้ดจาก App Store Connect

ในการลงชื่อรหัสแอป iOS คุณต้องมีบัญชีนักพัฒนา Apple ใบรับรองการพัฒนาและการเผยแพร่ ID แอปและโปรไฟล์การจัดเตรียมที่สร้างขึ้นสำหรับแอป เราได้กล่าวถึงรายละเอียดของกิจกรรมการเซ็นโค้ดในโพสต์ก่อนหน้านี้ ในการกำหนดค่าการลงนามโค้ดด้วยตนเองสำหรับการ พัฒนาหรือดีบัก บิวด์ของแอป iOS บน Codemagic เราต้องการสิ่งต่อไปนี้:

  • ใบรับรองการพัฒนาหรือจัดจำหน่ายในรูปแบบ .P12
  • ดาวน์โหลดโปรไฟล์การจัดเตรียมจาก App Store Connect หรือพอร์ทัล Apple Developer
  • ตัวระบุบันเดิลของแอป iOS

เราสามารถดาวน์โหลดทั้งใบรับรองและโปรไฟล์การจัดเตรียมจากส่วนใบรับรอง ตัวระบุ และโปรไฟล์ในพอร์ทัล Apple Developer ใน

ดาวน์โหลดโปรไฟล์การจัดเตรียมจากพอร์ทัลนักพัฒนา iOS

ในทำนองเดียวกัน เราสามารถดาวน์โหลดโปรไฟล์การจัดเตรียมจากพอร์ทัลนักพัฒนาของ Apple

โปรไฟล์การจัดเตรียม iOS

เราต้องการทั้งใบรับรองและโปรไฟล์การจัดเตรียมเพื่อลงนามรหัสแอป iOS ของเราใน Codemagic ดังนั้นให้บันทึกไฟล์เหล่านี้เพื่อใช้ในภายหลัง

กำลังอัปเดตไฟล์โปรเจ็กต์ Xcode

ตอนนี้ เรามีทรัพย์สินการเซ็นโค้ดทั้งหมดจากพอร์ทัล Apple Developer แล้ว ต่อไป เราต้องจัดเรียงไฟล์โปรเจ็กต์ Xcode เพื่อที่จะใช้การเซ็นโค้ดด้วยตนเองกับทีมที่ถูกต้องและโปรไฟล์การจัดเตรียม เราสามารถทำได้โดยใช้สคริปต์ Ruby โดยใช้ Xcodeproj Gem หรือเพียงแค่เปลี่ยนฟิลด์ต่อไปนี้ในไฟล์ i os/YOUR_APP.xcodeproj/project.pbxproj

  • ทีมพัฒนา = YOUR_DEVELOPMENT_TEAM_ID
  • ProvisioningStyle = คู่มือ
  • PROVISIONING_PROFILE_SPECIFIER = NAME_OF_YOUR_PROVISIONING_PROFILE

ในแอพ Codemagic-Demo เราต้องแก้ไขไฟล์โครงการ Xcode ที่นี่บน GitHub เราต้องทำการเปลี่ยนแปลงเหล่านี้สำหรับการกำหนดค่าการ ดีบัก สำหรับบิลด์ภายในและสำหรับการกำหนดค่าการ เปิดตัว สำหรับบิลด์ App Store เมื่อเราตั้งค่าใน project.pbxproj เราก็พร้อมที่จะปรับใช้แอป iOS จาก Codemagic โดยไม่มีปัญหาใดๆ

การตั้งค่าการเซ็นชื่อรหัสด้วยตนเองใน Codemagic

เมื่อพัฒนาบน Linux เราจะเห็นสถานะของแอป Android เท่านั้นเนื่องจากไม่สามารถติดตั้งหรือเรียกใช้เครื่องมือ Xcode และ iOS บน Linux ได้ มีความพยายามอย่างต่อเนื่องในการนำเครื่องมือ Swift และ iOS บน Linux แต่จะใช้เวลามาก เมื่อเราพร้อมที่จะเผยแพร่แอป เราสามารถตั้งค่า CI/CD สำหรับแอปโดยใช้ Codemagic ได้อย่างง่ายดาย ดูคู่มือการเริ่มต้นใช้งานที่นี่ OnCodemagic เราสามารถเปิดใช้งานการลงชื่อรหัส iOS จากส่วนเผยแพร่โดยอัปโหลดใบรับรองและโปรไฟล์การจัดเตรียมที่เราดาวน์โหลดจากพอร์ทัล Apple Developer ในแอป Codemagic ให้ไปที่ การตั้งค่า → เผยแพร่ → การลงนามรหัส iOS → ด้วยตนเอง แล้วอัปโหลดใบรับรองและโปรไฟล์การจัดเตรียมของคุณที่นั่น

การตั้งค่าการเซ็นชื่อรหัสด้วยตนเองใน Codemagic

เมื่อคุณรันบิลด์ คุณจะได้รับแอป iOS ในรูปแบบของไฟล์ IPA ซึ่งสามารถปรับใช้บนอุปกรณ์ที่จัดเตรียมไว้ รายการสร้างสิ่งประดิษฐ์ใน Codemagic จะมีลักษณะดังนี้:

รายการสร้างสิ่งประดิษฐ์ใน Codemagic

ดังที่เห็นได้ในส่วน Artifacts เราได้รับไฟล์ codemagic_demo.ipa และไฟล์ dSYMs สำหรับรายงานข้อขัดข้อง เราสามารถติดตั้งแอปนี้บนอุปกรณ์ iOS ใดๆ ที่เพิ่มลงในโปรไฟล์การจัดเตรียมและทดสอบแอป iOS ของเรา หากเราพบจุดบกพร่องที่นั่น เราสามารถกลับไปที่สภาพแวดล้อม Linux และแก้ไขจุดบกพร่องเหล่านั้นได้เสมอ

การแจกจ่ายแอพ iOS ไปยัง App Store

ณ ตอนนี้ เราได้สร้างแอป iOS เวอร์ชันดีบั๊กสำหรับการทดสอบภายในแล้ว ในทำนองเดียวกัน เราสามารถเผยแพร่แอป iOS ไปยัง App Store เมื่อเราพร้อมที่จะปรับใช้แอพใน App Store เราจำเป็นต้องสร้างแอพในโหมด รีลี ส เราสามารถทำได้โดยใช้ใบรับรองการจัดจำหน่ายและโปรไฟล์การจัดเตรียมการผลิต เราสามารถสร้างใบรับรองและโปรไฟล์ได้ในลักษณะเดียวกัน แต่เราต้องแน่ใจว่าได้เลือกการแจกจ่าย App Store ในขณะที่สร้างโปรไฟล์การจัดเตรียม

ตัวเลือกการจัดจำหน่าย App Store

โปรไฟล์การจัดสรรการแจกจ่ายจะเรียกใช้แอป iOS บนอุปกรณ์ใดๆ และเราไม่จำเป็นต้องเพิ่มอุปกรณ์ในโปรไฟล์การจัดสรรอย่างชัดเจน โปรไฟล์การจัดเตรียม App Store จะมีลักษณะดังนี้:

โปรไฟล์การจัดเตรียม App Store

เมื่อเรามี ใบรับรองการแจกจ่าย iOS และ โปรไฟล์การจัดเตรียมการผลิต แล้ว เราสามารถเลือกโหมดการ วางจำหน่าย ใน สร้างส่วนใน Codemagic ดังที่แสดงด้านล่าง

โหมดรีลีสในส่วนบิลด์ใน Codemagic

เรายังได้ตั้งค่าอาร์กิวเมนต์บิลด์เพื่อปล่อยแทนการดีบัก ในส่วนเผยแพร่ เราจำเป็นต้องอัปโหลดใบรับรองการ แจกจ่าย และโปรไฟล์การจัดเตรียมการผลิตเพื่อสร้างแอปเวอร์ชัน App Store

เมื่อ Codemagic สร้างสิ่งประดิษฐ์ของบิลด์ เราสามารถสร้าง App Store Connect ซึ่งเดิมเรียกว่า iTunesConnect โดยทำตามคำแนะนำของ App Store และส่งแอปเพื่อตรวจสอบ

บทสรุป

ด้วยการผสมผสานระหว่างเฟรมเวิร์กการพัฒนาแอปพลิเคชันบนมือถือข้ามแพลตฟอร์มและโซลูชัน CI/CD ที่มหัศจรรย์ เช่น Codemagic การเป็นเจ้าของ Mac สำหรับการพัฒนาแอป iOS นั้นไม่จำเป็นเลย อาจมีปัญหาบางอย่างในการดีบักแอปในขณะที่กำลังพัฒนาสำหรับ iOS แต่สามารถพัฒนาและเผยแพร่แอป iOS ไปยัง App Store ได้อย่างสมบูรณ์โดยใช้ Flutter และ Codemagic

ไอคอนแอพเนทีฟ

ต้องการสร้างแอพที่รองรับอนาคตสำหรับธุรกิจของคุณ?

ขอทำงานร่วมกัน