xcodebuild, şema içermiyor diyor


125

Bir merak sorunum var.

Üzerinde çalıştığım ve her zaman XCode IDE'den oluşturduğum bir projem var ve iyi çalıştı. Şimdi projeyi inşa etmek için Bamboo'u kuruyorum ve bu nedenle onu komut satırından oluşturuyorum.

Sorun şu ki, eğer kodumu GIT'den kontrol edersem ve sonra onu oluşturmak için xcodebuild kullanırsam, şemanın bulunamadığını söylüyor, ancak projeyi açarsam, inşa ediyor ve daha sonra komut satırından tekrar oluşturmaya çalışırsam aynı komutla çalışır.

Projeyi açtığımda XCode ne sihir yapıyor ya da aptalca bir şey yapıyor muyum, belki .gitignore dosyamdaki yapmamam gereken bir dosyayı hariç tutarak?


Projeyi xcode'da açtığımda bir .xcscheme dosyası oluşturduğumu, ancak xcuserdata / username.xcuserdatad klasöründe olduğunu fark ettim ... ama şemanın neden kullanıcılar klasörünün altında 'oluşturulduğunu' anlamıyorum .. ve nasılım bunu bambuda halledecek
Zac Tolley

Yanıtlar:


187

.Xcscheme dosyasıyla ilgili olarak kesinlikle doğru yoldasınız - bu sorun kendi projelerimi oluştururken ortaya çıktı!

Gelecek kuşaklar için veya en azından bir aramadan buraya gelenler için, işte iki versiyon var - "Meşgulüm, bu yüzden sadece gerçekler lütfen" versiyonu ve daha kapsamlı bir tartışma ve mantık. Bu sürümlerin her ikisi de bir Çalışma Alanı dosyasından derlemeye çalıştığınızı varsayar; Değilseniz, özür dilerim çünkü bu çoğunlukla çalışma alanı tabanlı projeler için geçerli.

Yoğun 'Düzelt' Sürümü

Temel neden, Şemaların varsayılan davranışının, özellikle paylaşılan olarak işaretlenene kadar şemaları 'özel' tutmak olmasıdır. Komut satırı ile başlatılan bir derleme durumunda, Xcode UI asla çalışmaz ve xcoderun aracının üzerinde çalışacak kendi Şema önbelleği yoktur. Amaç, Bamboo'nun çalıştırmasını istediğiniz düzeni oluşturmak, paylaşmak ve uygulamaktır:

  1. Kodun temiz çalışan bir kopyasında, Projenizin çalışma alanını açın.
  2. Ürün Menüsünden Şema> Şemaları Yönet ... öğesini seçin.
  3. Proje için tanımlanan Şemaların listesi görüntülenir.
  4. Şema Bamboo'nun çalıştırılmaya çalıştığı yeri bulun
  5. Bu şema için 'Paylaşılan' kutusunun işaretlendiğinden ve 'Kapsayıcı' ayarının proje dosyasının kendisine değil, Çalışma Alanı'na ayarlandığından emin olun.
  6. Düzenleri Yönet sayfasını kapatmak için 'Tamam'ı tıklayın.
  7. WorkspaceName.xcworkspace / xcshareddata / xcschemes adresindeki projenizde yeni bir .xcscheme dosyası oluşturuldu.
  8. Bu dosyayı deponuza işleyin ve bir Bamboo derlemesi çalıştırın.

Daha Derin Tartışma ve Gerekçe

Xcode 4, kablolama ile ilgili Xcode projelerinin mekanikleriyle uğraşmanın, hedefler oluşturmanın ve birlikte yapılandırmalar oluşturmanın doğasında olan kaosun bazılarını denemek ve evcilleştirmek için bir yol olarak Çalışma Alanları ve Şemaları tanıttı. Çalışma alanının kendisi, içerdiği daha küçük veri 'kutularının' her birini tanımlayan kendi yapılandırma verisine sahiptir ve .xcodeproj dosyalarını eklemek için bir iskelet ve her geliştirici makinesine veya CI sistemine yansıtılan bir dizi paylaşılan yapılandırma verisi görevi görür. . Bu, Çalışma Alanlarının hem gücü hem de tuzağıdır - 1) işleri% 100 doğru şekilde yapılandırmanın, ancak yanlış konteynere koymanın veya 2) doğru konteynere koymanın, ancak uygun olmayan şekilde yapılandırmanın veri oluşturması için birçok yol vardır. sistemin diğer bölümleri tarafından erişilemez!

Xcode 4 şemalarının varsayılan davranışı, projeler Çalışma Alanı dosyasına eklenirken otomatik olarak yeni şemalar oluşturmaktır. Birkaç .xcodeproj dosyası eklemiş olanlar, özellikle proje dosyaları eklendikçe, daha sonra kaldırıldıktan sonra aynı çalışma alanına okundukça şema listenizin hızla işe yaramaz hale geldiğini fark etmiş olabilirler. Tüm şemalar, otomatik olarak oluşturulmuş veya manuel olarak oluşturulmuş, varsayılan olarak yalnızca mevcut kullanıcı tarafından görülebilen 'özel' şemalar olur, hatta .xcuserdata dosyaları projenin verileri ve yapılandırmasıyla işlendiğinde bile. Bamboo, xcodebuild'den gelen şifreli yapı hatasının temel nedenidir - Bamboo, yapıyı Xcode UI üzerinden değil, komut satırından çalıştırdığından, Şemaların otomatik olarak oluşturulma fırsatı yoktur ve yalnızca aşağıdakilere güvenir. çalışma alanının kendisinde tanımlanır.

xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug

xcodebuild <'çalışma alanı' Parametre Değeri> / xcshareddata / xcschemes'de bulunan <'düzen' Parametre Değeri> .xcscheme dosyasını aramaya gider.

Açıkçası, hem Bamboo'ı hem de bir çalışma alanını yapılandırmanın birçok yolu vardır, bu nedenle benzersiz yapılandırmanızın burada sunulanlarla% 100 eşleşmeyebileceğini unutmayın. Temel çıkarımlar:

  1. Xcode UI'nin sihirli bir şekilde hallettiği bazı otomatik görevler, Xcodebuild CLI aracılığıyla kullanılamaz.
  2. 'Kapsayıcı hiyerarşisindeki' birçok yere şema ekleyebilir ve yapılandırma verilerini oluşturabilirsiniz - Verilerinizin doğru kapsayıcıda (Çalışma Alanı, Proje ve / veya Oluşturma Hedefi) toplandığından emin olun.
  3. Xcodebuild aracının konteyner hiyerarşisinin neresinde yapılandırma verilerini arıyor olabileceğini düşünün; Nereden bakmaya başlayacağına dair harika bir gösterge, '-çalışma alanı' veya '-proje' argümanlarının kullanımına dayanır.

'Paylaşılan' kutusu zaten işaretlendi ... şimdi ne olacak?

Aynı sorunla kendi Bamboo örneğimde karşılaştım; benim depomda işlenen şemanın güncelliğini yitirdiği ve komut satırı araçlarının en son sürümünün onu incelikle işlemediği ortaya çıktı. Bu daha önce var olduğu için, şemayla ilgili göze batacak şekilde özel bir şey olmadığından emin olmak için ayarlara bir göz attım, şemayı 'Paylaşılan' olarak işaretlediğimden emin olmak için sildim ve yeniden oluşturdum ve yeni .xcscheme dosyasını deposu.

Her şey iyi görünüyorsa ve yeniden inşa etmek sorunu çözmüyorsa, bu kapsayıcı ayarını iki kez kontrol edin - bu düzeni hiyerarşide yanlış kapsayıcıya eklemek gerçekten çok kolaydır!


Bu aslında benim için HAYIR hatası ancak 65 çıkış kodu döndüren rastgele bir xcodebuild hatasını düzeltti. Kapın projeye ayarlandığı ve çalışma alanının kendisi değil, değiştirdiği ve işte sorun çözüldü. Teşekkürler.
Simon Lee

Teşekkürler! Bu tam olarak aradığım düzeltme.
raidfive

MY Test ve arşiv seçeneği bu nedenle devre dışıdır. Planımın paylaşıldığını kontrol ettim. hala bot aracılığıyla inşa edemiyorum, yerel olarak inşa edebiliyorum ama bahsettiğim gibi arşivleyemiyorum. Sizce bu sorunla ilgili mi
Alix

Teşekkürler! Şema kapsayıcısını çalışma alanıma ayarlamak, TeamCity yapılarımda yaşadığım sorunları çözdü.
Form

Bu mesajdan şema nasıl bulunur. Tam olarak bu mesajı alıyorum. [Xcodebuild: error: "jamesAppV2" adlı çalışma alanı "" adlı bir şema içermiyor. "-List" seçeneği, çalışma alanındaki şemaların adlarını bulmak için kullanılabilir.]
Qadir Hussain

52

Sorunu şu şekilde ayıklayın:

xcodebuild -list

veya bir çalışma alanı kullanıyorsanız (ör. bölmelerle)

xcodebuild -workspace MyProject.xcworkspace -list

Şemanız listelenmemişse aşağıdaki gibi düzeltin:

görüntü açıklamasını buraya girin


Planları paylaştırmak onların görünmesini sağlar xcodebuild -list... teşekkürler!
Dan Rosenstark

35

Cevapların çoğu, planınızı Xcode kullanarak paylaşmanızı ve ardından depoya değişiklikler yapmanızı önerir. Elbette bu işe yarar, ancak yalnızca kaynak koda erişiminiz varsa ve değişiklik yapma hakkınız ve diğer birkaç varsayımınız varsa.

Ancak dikkate alınması gereken bir dizi " eğer "

  • Ya Xcode projesini herhangi bir nedenle değiştiremezseniz?
  • CI sunucusunda otomatik olarak yeni bir şema oluşturursanız ne olur?
    Bu aslında oldukça sık oluyor. Calabash gibi test otomasyon çerçevesini kullanırsanız, normalde bir şemayı otomatik olarak çoğaltan mevcut bir hedefi kopyalarsınız ve orijinal şema olsa bile yeni şema paylaşılmaz.

Yakut ve xcodeproj mücevher

Xcodeproj Ruby gem kullanmanızı tavsiye ederim . Bu, tonlarca Xcode ile ilgili görevi otomatikleştirmenize yardımcı olabilecek gerçekten harika bir açık kaynak araçtır.

Btw, CocoaPods tarafından Xcode projeleriniz ve çalışma alanlarınızla uğraşmak için kullanılan mücevher budur .

Öyleyse kur

sudo gem install xcodeproj

Ardından tüm şemaları yeniden paylaşmak için basit bir Ruby betiği yazın, gem bu amaç için recreate_user_schemes yöntemine sahiptir

#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("MyProject.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save

Şema dosyalarını kullanıcının klasöründen xcshareddata / xcschemes'e kopyalamakla kalmaz , aynı zamanda bu dosyaları önce pbxproj dosyasını ayrıştırarak oluşturur .


1
Başka birinin buna rastlaması durumunda, recreate_user_schemestest hedeflerini doğru şekilde ele almadığı görülüyor . Bununla ilgili bir hata raporu verdim .
Matt Kantor

Bunun hakkında blog yazdım. nsbogan.com/xcode/2014/05/29/share-xcode-schemes . Maalesef birim testleriyle ilgili sorun hala çözülmedi.
i4niac

iyi, bu çözümü denedim. Ancak çalıştırdığımda xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"'Scheme <IDEScheme: 0x7fc9ea5e5fd0:' Finance '> oluşturmam ve arşivlemem istendi, ancak çalıştırma hedefi <IDERunDestination: 0x7fc9eb47c6c0:' iPad 2 '> bir dağıtım platformu değil ve bu eylemin olmaması gerekir izin verildi '. Ama
XCode'u açtığımda

2
archiveeylem her zaman imzalamayı içerir ve hedef gerçek bir cihaza ayarlanmalıdır. Sizin durumunuzda hedef iPad 2, ki bence simülatör, bu nedenle arşivleme mümkün değil. Komutunuzda eksik olan önemli bir seçenek -sdk iphoneosvar: Önce bunu deneyin ve nasıl gittiğini görün. Bunu Xcode IDE'den çalıştırdığınızda, muhtemelen hedefiniz olarak ayarlanmışsınızdır iOS Deviceveya belki de gerçek bir cihazınız takılıdır, bu yüzden hedef olarak ayarlanır. Bu nedenle arşivleme IDE'den çalışır. Komut satırı daha "aptaldır" ve bazen varsayılan olarak "yanlış" seçenekleri kullanabilir, bu nedenle daha spesifik olmanız gerekir.
i4niac

1
Buna daha fazla oy verilmelidir - teşekkür ederim! Swift çerçevelerine sahip Calabash projeleri, XCode6.1.1 ile derlenemez çünkü onları bir şemadan oluşturmanız gerekir. Bu mücevher harika.
David


3

Planın eksik olmasının yaygın bir nedeni, taahhütleri başlangıç ​​noktasına itmeyi unutmaktır. Eksik bir şema mesajı alırsanız, önce şemanın paylaşıldığını doğrulamalı, ardından değişiklikleri gerçekleştirdiğinizi VE bunları kaynak sunucuya gönderdiğinizden emin olmalısınız.


1

CI uygularken bu hatayı aldım. Yukarıdaki soru, Gitlab'ın kendi CI aracını kullanmam dışında sorunlarımla aynıdır. Bamboo'da böyle bir dosya olup olmadığını kontrol edebilirsiniz. Dosyada
bazı değişiklikler yaparak gitlab-ci.ymlçözdüm.
Paylaşarak müsait olduktan sonra scheme. Xcode'da Products>Scheme>Manage SchemePaylaşmak için paylaş'a gidin ve kontrol edin.

değişiklikler

Her yerde mutlak yol belirleyin.
Örneğin. xcodebuild clean archive -archivePath /path/to/your/project/build/testDemo -scheme testDemo | xcpretty
burada /path/to/your/project/yolunuzla ve testDemoproje adınızla değiştirmeniz gerekir .


0

Aynı problemle karşılaştım ama ana projenin alt projesi olarak xcode ile derleme sırasında. Bağımsız xcode'da alt proje oluşturuldu - bundan sonra bu hata ortadan kalktı.


0

Bu sorunla karşılaştım ve buradaki yanıtların bir kısmı gerçekten çözümü sağlasa da çok net bulamadım. Bu yüzden bir tane daha ekleyeceğim. Özetle, bir şemanın excode'dan nasıl paylaşılacağı.

Şuraya git Product> Scheme>Manage Schemes

görüntü açıklamasını buraya girin

Daha sonra, her birinin paylaşıldığı veya paylaşılmayacağı belirtilen şemaların bir listesi gösterilecektir. Paylaşmak istediklerinizi kontrol edin (geliştirme ve üretim sürümleri için farklı olabilir)

görüntü açıklamasını buraya girin

Bu makaleden alınan görüntüler https://developer.nevercode.io/docs/sharing-ios-project-schemes


0

Bu konu ile ilgili durumuma çözüm eklemek istiyorum. Bu, mevcut projeyi klonlayan, ihtiyacınız olan tüm şemaların zaten paylaşıldığı sizin için:

görüntü açıklamasını buraya girin

, fastlane lanestüm şemalarınız dahil olmak üzere tüm şeritlerinizi doğru şekilde görüntüleyerek:

görüntü açıklamasını buraya girin

, ancak fastlane gymyalnızca ana şemaları gösterin (geliştirme ve test şemalarını değil):

görüntü açıklamasını buraya girin

Çözüm, tarafından listelenmeyen şemalar için paylaşılan seçeneğin işaretini kaldırmakfastlane gym ve ardından tekrar kontrol etmektir . Şemalar için .xcscheme oluşturur:

görüntü açıklamasını buraya girin

Şimdi, kontrol ederseniz fastlane gym, tüm şemalar listelenecektir:

görüntü açıklamasını buraya girin

Daha sonra bu .xcshemes dosyasını depoya kaydetmelisiniz, böylece projeyi klonlayan diğer geliştiriciler dosyaları alacaktır.


0

Şema üzerinde "Paylaşılan" düğmesini bulmaya çalışan Xcode 11.4'e sahip herkes için, artık bireysel düzene taşındı.

  1. İstediğiniz düzeni seçin
  2. "Düzenle" ye basın
  3. "Paylaşılan" kutusunu işaretleyin

Şema Düzenleme Şimdi Paylaşılan Kutu İçeriyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.