W jaki sposób XCode instaluje plik .pkg w innej lokalizacji?

4

Chcę zainstalować symulatory IOS za pomocą wiersza poleceń. Z pobranej plisty widzę to:

<dict>
    <key>dependencies</key>
    <array/>
    <key>fileSize</key>
    <integer>584180466</integer>
    <key>identifier</key>
    <string>Xcode.SDK.iPhoneSimulator.6.1</string>
    <key>name</key>
    <string>iOS 6.1 Simulator</string>
    <key>source</key>
    <string>http://devimages.apple.com/downloads/xcode/simulators/ios_6_1_simulator.dmg</string>
    <key>userInfo</key>
    <dict>
        <key>ActivationPredicate</key>
        <string>$XCODE_VERSION &gt;= '5.0'</string>
        <key>ApplicationsBlockingInstallation</key>
        <array>
            <string>com.apple.iphonesimulator</string>
        </array>
        <key>IconType</key>
        <string>IDEDownloadablesTypeSimulator</string>
        <key>InstallPrefix</key>
        <string>$(DEVELOPER)</string>
        <key>InstalledIfAllPathsArePresent</key>
        <array>
            <string>$(DEVELOPER)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk</string>
        </array>
        <key>RequiresADCAuthentication</key>
        <false/>
        <key>Summary</key>
        <string>This package enables testing of this previous version of iOS by installing legacy frameworks into the iOS Simulator.  If your app intends to support this version of iOS, it is highly recommended that you download this package to aid in your development and debugging.</string>
        <key>Xcode.SDKs</key>
        <array>
            <dict>
                <key>CanonicalName</key>
                <string>iphonesimulator6.1</string>
                <key>Path</key>
                <string>$(DEVELOPER)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk</string>
                <key>Platform</key>
                <string>com.apple.platform.iphonesimulator</string>
                <key>SupportedDeviceFamilies</key>
                <array>
                    <integer>1</integer>
                    <integer>2</integer>
                </array>
                <key>Version</key>
                <string>6.1</string>
            </dict>
        </array>
    </dict>
    <key>version</key>
    <string>6.1</string>
</dict> 

Tutaj jest .dmg http://devimages.apple.com/downloads/xcode/simulators/ios_6_1_simulator.dmg i an InstallPrefix. W środku .dmg jest .pkg plik instalowany do (względny) ./Platforms.

Problem polega na tym, że jeśli tylko spróbuję zainstalować to przez installer:

sudo installer -pkg /Volumes/.../ios_6_1_simulator.pkg -target /

Zainstaluje się na /Platforms zamiast zamierzonego /Applications/Xcode.app/Contents/Developer/Platforms.

Nie mogę ustawić innego celu, który nie jest punktem montowania. Jak mogę go zainstalować w tej lokalizacji?

EDYTOWAĆ: To nawet nie działa, jeśli ustawię niestandardowy punkt montowania. Oto moja próba:

$ mkdir /tmp/SampleDir

$ hdiutil create -srcfolder "/tmp/SampleDir" -volname "Sample Install" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size 1g pack.temp.dmg
.............................................................................................................................................................................................................................................
created: /tmp/pack.temp.dmg

$ hdiutil attach -readwrite -noverify -noautoopen -mountpoint /Volumes/SampleDir "pack.temp.dmg"
/dev/disk4              GUID_partition_scheme           
/dev/disk4s1            Apple_HFS                       /Volumes/SampleDir

$ sudo installer -pkg ~/Desktop/iPhoneSimulatorSDK6_1.pkg -target /Volumes/SampleDir
Password:
installer: Package name is iPhoneSimulatorSDK6_1
installer: Installing at base path /Volumes/SampleDir
installer: The install failed (The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance.)
St. John Johnson
źródło
Usunięto jeden z przepływu stosu.
St. John Johnson

Odpowiedzi:

3

W sytuacji, gdy instalujesz pakiet, który obsługuje relokację, możliwe jest udostępnienie pliku XML opcji instalatora installer zmodyfikować opcje instalacji. Jednak może to nie być obsługiwane lub dostępne na wszystkich pakietach (w zależności od tego, jak pakiet został zbudowany). Z strona podręcznika instalatora :

The customLocation attribute can be set for a choice only if that choice
explicitly allows a user-defined path. That is, if the choice would have a
Location popup when viewed in the Customize pane of the Installer application, it 
can be set via customLocation.  (Otherwise, installation paths cannot be 
arbitrarily modified, since the package author must account for custom install 
locations for the installation to work properly.)

Z tego, co widzę, iPhoneSimulatorSDK6_1.pkg, do którego się odwołujesz, nie obsługuje tej opcji. Jednak nadal możliwe jest przeniesienie ładunku pakietu instalacyjnego po instalacji:

sudo installer -pkg /Volumes/Bittersweet6M149.iPhoneSimulatorSDK6_1/iPhoneSimulatorSDK6_1.pkg -tgt /
sudo mv /Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator/Developer/SDKs

Alternatywnie możesz użyć pkgutil aby rozwinąć pakiet, cpio wyodrębnić ładunek i mv umieścić SDK na swoim miejscu:

pkgutil --expand /Volumes/Bittersweet6M149.iPhoneSimulatorSDK6_1/iPhoneSimulatorSDK6_1.pkg ~/iPhoneSimulator6_1
cd ~/iPhoneSimulator6_1
cpio -i -I ~/iPhoneSimulator6_1/Payload
sudo mv Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator/Developer/SDKs

Nie jestem pewien, w jaki sposób Xcode umieszcza symulatory / SDK we właściwej lokalizacji. Jednak obie wyżej wymienione metody pozwalają na użycie symulatora iOS 6.1 w Xcode 5.0.2 na Mavericks (10.9).

Eddie Kelley
źródło
poprawka: pkutil - & gt; pkgutil
DanSkeel