Applescript geht nicht mehr richtig mit Xcode4.6

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Applescript geht nicht mehr richtig mit Xcode4.6

    Hi,

    ich benutze folgendes kleines Script als BuildPhase um bei jedem Build den Wert im CFBundleVersion der info.plist um einen hochzuzählen. Das hat immer super funktioniert aber seit dem Update auf code4.6 heute macht er aus dem CFBundleVersion Type immer eine NSNumber wenn er reinschreibt. Es muss aber ein NSString sein, denn sonst bekomme ich nicht nur ein blödes Warning, ich kann es auch nicht in den Store hochladen.

    Hat jemand eine Idee warum aus dem pist Eintrag ein NSNumber wird obwohl im Script doch eigentlich ein "as string" steht?

    Quellcode

    1. -- we need the location to self
    2. tell application "Finder"
    3. set myLocation to container of (path to me)
    4. set infoFiles to every file of myLocation whose name ends with "-Info.plist"
    5. if ((count of infoFiles) is not 1) then
    6. return someError
    7. end if
    8. end tell
    9. -- we append the file name
    10. set propertyListLocation to (first item of infoFiles) as text
    11. tell application "System Events"
    12. -- read info.plist
    13. set datei to property list file propertyListLocation
    14. -- fetch the build number item
    15. set buildNumber to every property list item of datei whose name is "CFBundleVersion"
    16. -- check exists
    17. if ((count of buildNumber) is 1) then
    18. -- get it
    19. set buildItem to item 1 of buildNumber
    20. -- increment the number and write it back
    21. set value of buildItem to ((((value of buildItem) as integer) + 1) as string)
    22. return true
    23. end if
    24. return someError
    25. end tell
    Alles anzeigen


    Oder liegt es sogar am Mavericks das ich heute auch neu installiert habe?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Hallo Claus,

    ich hätte nicht gedacht, dass jemand meinen alten Schmodder verwendet ;)

    Schon seit langem bin ich umgestiegen auf:

    Quellcode

    1. infoPlist="${INFOPLIST_FILE}"
    2. bundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$infoPlist")
    3. bundleVersion=$(($bundleVersion + 1))
    4. /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bundleVersion" "$infoPlist"


    Noch eine wichtige Info:

    Bei neuen iOS Projekten, die mit Xcode 4.x (x > keine Ahnung) setzt Apple bei "CFBundleVersion" den Wert "1.0" statt "1" ein.
    Total unsinnig, da die Punkt-Versionierung ja über "CFBundleShortVersionString" angewandt wird.
    Den Wert muss man bei neuen iOS Projekten korrigieren. Bei den Mac Project Templates ist es hingegen korrekt.

    Viele Grüße
  • Ich habe mal das Script zur Build Phase hinzugefügt, allerdings meckert Xcode immer:

    Quellcode

    1. Print: Entry, "CFBundleVersion", Does Not Exist
    2. /Pfad/Script.sh: line 2: -c: command not found
    3. Command /bin/sh failed with exit code 127


    Ist CFBundleVersion aber in meiner Plist enthalten:

    Quellcode

    1. <key>CFBundleVersion</key>
    2. <string>2</string>

    Muss ich da noch irgendwas beachten ?
  • Hallo,

    Wäre es auch möglich die Build-Nr nur bei Release-Builds zu erhöhen?

    Klar, so etwas ist problemlos möglich.

    Quellcode

    1. confuguration="${CONFIGURATION}"
    2. if [ $confuguration == "Release" ]; then
    3. infoPlist="${INFOPLIST_FILE}"
    4. bundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$infoPlist")
    5. bundleVersion=$(($bundleVersion + 1))
    6. /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bundleVersion" "$infoPlist"
    7. echo $confuguration
    8. else
    9. echo $confuguration
    10. fi
    Alles anzeigen


    Ich denke nur, dass das nicht sinnvoll ist.
    Schließlich impliziert (für mich zumindest) "CFBundleVersion", wie oft das Teil gebaut wurde.

    Viele Grüße
  • In der App zeige ich die Versionsnummer in der Form x.x.CFBundleVersion. Da macht es für mich mehr Sinn die Nummer nur bei Release Builds zu erhöhen.

    Okay, verstehe. Das ist aber nicht "arttypisch".

    Bei einer Mac Anwendung steht dann im "About App" folgender Text "Version 1.2.34567890 (34567890)".
    Finde ich persönlich unschön.

    Viele Grüße
  • Bei einer Mac Anwendung steht dann im "About App" folgender Text "Version 1.2.34567890 (34567890)".


    Ich setze die Versionsnummer manuell zusammen und lasse die Angabe in Klammern weg. Wenn man die Bundleversion nur bei Release builds erhöht bekommt man auch nicht so riesige Zahlen :thumbsup:

    Wir handhabt ihr denn die Versionierung eurer Apps?
  • Es geht halt darum, dass man dann immer jede Revision einem Source zuordnen kann. Gerade bei Beta Versionen gibt man schonmal am Tag 2-3 Versionen raus, wenn man z.b. Mit einem Beta-Tester eine Debug-Session fährt. Durch den Build (in dem fall halt als Revisions Nummer) kann ich dann auch Wochen später noch zuordnen welche Version von wann das ist.

    Ich brauche mich bei der Beta dann eben nicht um die versionsnummer kümmern.

    Bei Releases mache ich es aber eben lieber von Hand, damit die nicht so inflationär ausfallen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • So handhabe ich das auch.

    Zumal ich oft Updates bereitstelle, die ich nicht als Update kennzeichne und auch keine Änderung der Versionnummer haben.
    In der Regel ist das dann eine Kleinigkeit, die ich behoben habe oder einfach implementiert wissen möchte.

    Über die Build Number ist für mich dann zweifelsfrei zuzuordnen was in dem Ding drin ist und was geändert wurde.

    Viele Grüße