ต่อไปนี้คำแนะนำเหล่านี้ (ดูเอกสารนักพัฒนาแอปเปิ้ลและคำตอบ BoltClock เพื่อทดสอบแอป iOS บนอุปกรณ์โดยไม่ต้องโปรแกรมสำหรับนักพัฒนาแอปเปิ้ลหรือแหกคุก ) ผมก็สามารถที่จะรวบรวมแอป iOS (ในกรณีนี้ราก , วิดีโอเกมคอนโซล app จำลองซึ่งไม่ได้ ปฏิบัติตามหลักเกณฑ์ของ Apple และจะไม่ได้รับอนุญาตใน Apple App Store) ใน Xcode 7 ลงชื่อเข้าใช้ด้วยบัญชี iCloud ส่วนตัวของฉันโหลดลงบน iPhone ของฉัน (โดยเสียบเข้ากับ Mac ของฉันด้วย USB และเลือก iPhone ของฉันในเมนู xcode -> ผลิตภัณฑ์ -> ปลายทาง) และอนุญาตให้โทรศัพท์ของฉันดำเนินการโดยแอป "เชื่อใจ" ที่มีลายเซ็นนี้ในการตั้งค่า -> ทั่วไป -> โปรไฟล์ซึ่งติดตั้งใบรับรองที่เกี่ยวข้องกับบัญชี icloud ของฉันลงในอุปกรณ์
ฉันต้องการทำซ้ำขั้นตอนเหล่านี้ด้วยการดาวน์โหลดแบบ over the air ฉันขอให้ Xcode สร้างไฟล์ปฏิบัติการที่ฉันสามารถแบ่งปันกับพี่ชายของฉันที่มี iPhone แต่ไม่สามารถเข้าถึง Mac ด้วย Xcode ได้หรือไม่
StackExchange Network ประสบความสำเร็จในลักษณะนี้สำหรับโปรแกรมเบต้าแอป iOS โดยใช้การกระจายองค์กรของ Apple ผ่านการจัดการอุปกรณ์พกพาตามที่กล่าวไว้ในคำถามนี้ นอกจากนี้ยังมี BuildStore ( http://builds.io/ ) ซึ่งราคา $ 10 / ปียังเปิดใช้งานฟังก์ชันนี้โดยเพิ่มผู้ใช้ใน "ทีมนักพัฒนา" ที่เชื่อมโยงกับบัญชีโปรแกรมนักพัฒนา Apple ที่ชำระเงิน (ดูที่Apple dev docs ) . ด้วย Xcode 7 เป็นไปได้ไหมที่จะทำสิ่งนั้นโดยไม่ต้องมีองค์กรหรือแม้แต่บัญชีผู้พัฒนาที่ชำระเงินทั่วไป
อัปเดต: ขอบคุณความช่วยเหลือของ Stacksza ทำให้ฉันมีความคืบหน้าซึ่งฉันจะสรุปที่นี่
- XCode จะสร้างไฟล์เก็บถาวร (ผลิตภัณฑ์ -> ไฟล์เก็บถาวร) แต่จะไม่อนุญาตให้คุณส่งออกไฟล์เก็บถาวรไปยังไฟล์. ipa สำหรับการกระจายแบบเฉพาะกิจโดยไม่ต้องสมัครสมาชิกระดับบัญชี ADP ที่ชำระเงิน
- ไม่มีปัญหา แต่เนื่องจากเครื่องมือบรรทัดคำสั่ง Xcode ไม่สร้างปฏิบัติการ .ipa แม้จะมีบัญชี ADP ไม่มีจ่าย ใช้คำสั่งเช่น
xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance
(ดูคำตอบของ Khawar ที่วิธีสร้าง ipa ใน xcode 6 ที่ไม่มีบัญชี Apple Developer? ) - แต่คำสั่งนี้คุณต้องระบุรายการไฟล์. plist คำตอบโดย Razvan ที่การกระจายไฟล์ IPA ของ iOS (OTA) สำหรับประชาชน มีรายการ manifest.plist รวมถึงคำแนะนำสำหรับรูปแบบไฮเปอร์ลิงก์ที่จำเป็นสำหรับการจัดทำลิงค์ดาวน์โหลดซึ่งจะต้องโฮสต์บนเว็บเพจ SSL อาจเป็นไปได้ว่า SSL URL จะต้องคำนวณรหัสมัดของแอปฉันไม่แน่ใจ
- แต่ข้างต้นใช้งานได้เฉพาะเมื่อมีการจัดเตรียมแอปสำหรับอุปกรณ์ที่ดาวน์โหลดและอุปกรณ์ได้ติดตั้งใบรับรองนักพัฒนาซอฟต์แวร์แล้ว ดังนั้นตัวอย่างเช่นอุปกรณ์ที่เคยเชื่อมต่อผ่าน USB เข้ากับ Xcode ของฉันตอนนี้สามารถดาวน์โหลดแอพผ่านทางอากาศได้ซึ่งยอดเยี่ยมมาก นี่คือความคืบหน้า แต่สำหรับอุปกรณ์ที่สะอาดฉันได้รับข้อผิดพลาด
Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)
(ตามที่ดูในคอนโซลของอุปกรณ์ซึ่งสามารถดูได้ใน Xcode -> หน้าต่าง -> อุปกรณ์หรืออย่างอื่นในแอป Apple Configurator) - สำหรับแอปจะได้รับการจัดเตรียมอุปกรณ์ที่จะต้องมี UDID ของอุปกรณ์ใน
embedded.mobileprovision
ไฟล์ดูวิธีการทำคุณฝังรายละเอียดการจัดเตรียมใน iOS App , วิธีการทำให้การตรวจสอบข้อมูลใน embedded.mobileprovision ของ IPA? , วิธีการหารายละเอียดในสิ่งที่ถูกนำมาใช้สำหรับการสร้างไฟล์ * .ipa? และมีวิธีดูว่า UDID ใดบ้างที่รวมอยู่ในบิลด์? . คุณไม่สามารถแก้ไขไฟล์นี้เพื่อเพิ่ม UDID ได้ แต่เนื่องจาก CODESIGNATURE ของแอพไม่ตรงกันและอุปกรณ์จะรายงานข้อผิดพลาดFailed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
- ตกลงดังนั้นเราต้องลาออกจากแอป Xcode มีเครื่องมือบรรทัดคำสั่ง
codesign
ที่สามารถทำได้ คำแนะนำอยู่ที่วิธีการลงชื่อไฟล์ ipa อีกครั้ง และลาออก IPA (iPhone)และลาออกที่ iPhone App แทรก Bundle ID ใหม่และส่งไปยัง Xcode ออแกไนเซอร์สำหรับการอัปโหลดและวิธีการอีกครั้งด้วยตนเองลงนามใน IPA มีการจัดเตรียมรายละเอียดใหม่ ฉันต้องระบุใบรับรองนักพัฒนาของฉันชื่อที่แม่นยำซึ่งสามารถพบได้ใน Keychain Access ภายใต้แท็บใบรับรองและดูเหมือนว่า "iPhone Developer: username@mac.com (ABCDEFGHIJ)" จากนั้นคำสั่งก็เป็นเช่นcodesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app
นั้น คำสั่งตัวอย่างในคำแนะนำข้างต้นรวมถึงการตั้งค่าสถานะที่เรียกว่า--resource-rules
แต่ฉันไม่พบไฟล์ดังกล่าวในแอปที่รวบรวมของฉันดังนั้นฉันจึงลบการตั้งค่าสถานะนั้น ฉันสงสัยว่ามันทำอะไรและจำเป็นหรือไม่ แก้ไข:โพสต์บล็อกที่ยอดเยี่ยมInside Code Signingโดย Thomas Kollbach อธิบายว่าการ--resource-rules
ตั้งค่าสถานะที่ใช้เพื่อระบุว่าส่วนใดของแอพต้องลงนาม แต่เนื่องจาก iOS8 เลิกใช้แล้วและต้องลงชื่อแอพทั้งหมด - ตอนนี้ที่ app ได้ UDID เพิ่มและมีการลงนามการดาวน์โหลดบนอุปกรณ์สดจะช่วยให้ข้อผิดพลาดและ
Could not install embedded profile: 0xe8008003 (This provisioning profile is malformed
A valid provisioning profile for this executable was not found
ฉันเดาว่าปัญหาตอนนี้คืออุปกรณ์ยังไม่ได้ติดตั้งใบรับรองนักพัฒนา เมื่อไซด์โหลดด้วย Xcode ก่อนที่แอปจะทำงานคุณจะต้องค้นหาใบรับรองที่ติดตั้งในการตั้งค่า -> ทั่วไป -> โปรไฟล์เลือกใบรับรองของคุณแล้วแตะ "เชื่อถือ" อย่างไรก็ตามตัวเลือกนี้จะไม่ปรากฏหลังจากการดาวน์โหลดแอพพลิเคชั่นโฆษณาแบบ over-the-air ดังนั้นฉันไม่แน่ใจว่าจะดำเนินการอย่างไร ฉันคิดว่าฉันต้องการวิธีการติดตั้งใบรับรองผู้พัฒนาบนอุปกรณ์ ตามการติดตั้งโปรไฟล์การจัดสรรบน iOS 8.0.2มันเคยเป็นไปได้เพียงแค่ส่งใบรับรองไปยังอุปกรณ์ แต่ไม่สามารถใช้งานได้กับ iOS 8 อีกต่อไปฉันไม่ได้พยายามยืนยัน ฉันจะติดตั้งใบรับรองนักพัฒนาซอฟต์แวร์ของฉันไปยังอุปกรณ์ iOS จากระยะไกลได้อย่างไร - ฉันพยายามส่งออกใบรับรองผู้พัฒนา iPhone ของฉันจาก Keychain Access และส่งอีเมลไปยังอุปกรณ์ อุปกรณ์สามารถติดตั้งใบรับรองได้ แต่จะแสดงพร้อมคำเตือนสีแดงว่าไม่ได้ลงนามในขณะที่เมื่อติดตั้งใบรับรองผ่าน Xcode / USB ก็ไม่มีคำเตือนดังกล่าว ตาม Rhythmic Fistman ที่เป็นไปได้ที่จะเข้ารหัสไฟล์ Embedded.mobileprovision อีกครั้ง? โปรไฟล์ต้องลงนามโดย Apple เพื่อให้ทำงานได้ นี่อาจเป็นจุดยึด Apple จะลงนามในใบรับรองของคุณหากคุณมีบัญชี ADP ที่ชำระเงินแล้ว
- โพสต์บล็อกนี้ในการจัดเตรียมโดยฌอนเฮเบอร์ถูกมากให้ความกระจ่างเกี่ยวกับทฤษฎีทั่วไปของใบรับรองผู้พัฒนาและจัดเตรียมโปรไฟล์ (พร้อมกับKollbach เป็นพวกเขาควรจะทั้งควรจะต้องอ่าน) มันมีย่อหน้านี้:
เหตุผลทั้งหมดนี้ใช้งานได้และปลอดภัยคือ Apple สร้างโปรไฟล์การจัดสรรในพอร์ทัลจากนั้นลงชื่อด้วยคีย์ส่วนตัวของพวกเขาก่อนส่งมอบให้กับคุณ การลงนามในโปรไฟล์การจัดสรรเป็นสิ่งที่ Apple ทำได้เท่านั้น ดังนั้นไฟล์ที่คุณดาวน์โหลดไม่สามารถแก้ไขได้หากไม่แสดงผลให้ถูกต้อง โปรไฟล์การจัดสรรที่ไม่ถูกต้องจะไม่ได้รับการยอมรับจาก iOS และทำให้ Apple สามารถควบคุมสิ่งที่นักพัฒนาสามารถจัดเตรียมและไม่สามารถจัดเตรียมได้โดยเพียงแค่ จำกัด การเข้าถึงการลงนามในโปรไฟล์การจัดสรรกับสิ่งต่าง ๆ ที่พอร์ทัลนักพัฒนา ที่ - แม้ว่าโปรไฟล์การจัดสรรสามารถรองรับตัวเลือกอื่น ๆ ที่คุณไม่สามารถใช้ได้โดยไม่ต้องจำคุก นี่คือเหตุผลที่คุณต้องลงทะเบียนอุปกรณ์ทดสอบในพอร์ทัล เพิ่มใบรับรองของคุณในพอร์ทัลและอื่น ๆ - เฉพาะสิ่งใดในพอร์ทัล (และดังนั้นจำนวนที่สามารถควบคุมและ จำกัด โดย Apple) สามารถรวมไว้ในโปรไฟล์การจัดสรรที่สร้างและลงนามอย่างถูกต้อง พอร์ทัลเป็นที่บังคับใช้นโยบายการจัดเตรียมและข้อ จำกัด ของ Apple อย่างแท้จริง
ดูเหมือนว่าจะตอบคำถามของฉันอย่างชัดเจน (ฉันสามารถทำให้แอปทำงานได้โดยไม่ต้องมีบัญชี ADP ที่ชำระเงิน) ด้วย "ไม่" แม้ว่าบทความนี้จะมาก่อน Xcode 7 Apparently Xcode 7 จะส่ง UDID ของอุปกรณ์ไปยังพอร์ทัล Apple และรับการตอบกลับโปรไฟล์การจัดสรรที่ลงนามโดย Apple ซึ่งมี UDID นั้น Xcode 7 ทำสิ่งนี้เฉพาะเมื่ออุปกรณ์เสียบผ่าน USB และรับการยอมรับจาก Xcode แต่มีคนสงสัยว่าการร้องขอ Xcode ด้วยตนเองไปยัง Apple นั้นสามารถสร้างขึ้นมาได้หรือไม่? ที่ลึกลงไปในสิ่งวิศวกรรมย้อนกลับของ Apple มากกว่าที่ฉันพอใจและอาจละเมิด ToS หรืออะไรก็ตามดังนั้นฉันคิดว่าฉันพอใจกับคำตอบ "ไม่"
ตามหน้าเกี่ยวกับ BuildStoreพวกเขาจัดการสิ่งที่คล้ายกันทางอีเมลดังนั้นจึงอาจเป็นไปได้
Xcode“ สร้างและเก็บถาวร” จากบรรทัดคำสั่งค่อนข้างเก่า (ประมาณ xcode 3) แต่แนะนำให้ใช้xcrun
แทนxcodebuild
สิ่งที่ฉันใช้