.. powiązane pytanie jest 4 lata później, więc prawdziwym problemem jest to, że cmos nigdy nie zaakceptował odpowiedzi. Niezależnie od tego przydatne są odpowiedzi na powiązane pytanie, podobnie jak tutaj. W obu wątkach spójrz poza pierwszą odpowiedź - czasem w późniejszej odpowiedzi jest więcej aktualnych informacji.
ToolmakerSteve
Odpowiedzi:
222
Jak tu opisuję , używam skryptu do przepisania pliku nagłówka z moim bieżącym numerem wersji Subversion. Ten numer wersji jest przechowywany w stałej kRevisionNumber. Następnie mogę uzyskać dostęp do wersji i numeru wersji, używając czegoś podobnego do następującego:
kRevisionNumber nie działa dla mnie. Aby uzyskać dane wyjściowe, zrobiłem to (używając poprawki @jspooner):[NSString stringWithFormat:@"Version: %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]]
Adam
147
Opierając się na odpowiedzi Brada Larsona, jeśli masz dużą i mniejszą wersję informacji przechowywaną w liście informacji (tak jak to zrobiłem w przypadku konkretnego projektu), to działało dobrze dla mnie:
Teraz ręczne przeglądanie mniejszej wersji może być uciążliwe, dlatego użycie sztuczki polegającej na zmianie numeru repozytorium jest idealne. Jeśli tego nie zrobiłeś (tak jak ja nie), powyższy fragment może być przydatny. Wyciąga także nazwę wyświetlaną aplikacji.
let versionNumber =Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!Stringlet buildNumber =Bundle.main.object(forInfoDictionaryKey:"CFBundleVersion")as!String
Swift 2
let versionNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")as!Stringlet buildNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion")as!String
Czy jest jakaś różnica między tymi dwoma? Obaj zwracają to samo dla mnie.
jjnevis
tak, może być twój numer kompilacji i wersja aplikacji są takie same w ustawieniach.
Shaik Riyaz
Ok, mam tylko jedno ustawienie w moim RAKEFILE - app.version (używam RubyMotion). Myślę, że albo zrobi to dla moich potrzeb. Dzięki
jjnevis,
Dzięki stary. Działał płynnie.
Felipe
1
FYI Lepiej jest użyć objectForInfoDictionaryKey:zamiast tego, infoDictionary] objectForKey:ponieważ pierwszy zwraca zlokalizowaną wartość (jeśli taka istnieje). Prawdopodobnie nie zrobi to jednak różnicy;)
dziekanWombourne
17
// Syncs with App Store and Xcode Project Settings InputNSString*appVersion =[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Możesz użyć infoDictionary, który pobiera szczegółowe informacje o wersji z info.plist Twojej aplikacji. Ten kod działa w trybie szybkim 3. Wystarczy wywołać tę metodę i wyświetlić wersję w dowolnym preferowanym elemencie interfejsu użytkownika.
Jeśli potrzebujesz kombinacji obu wersji i numeru kompilacji , oto krótka droga z użyciem Swift 3 :
let appVersion =Bundle.main.infoDictionary!["CFBundleShortVersionString"]!let buildNum =Bundle.main.infoDictionary!["CFBundleVersion"]!let versionInfo ="\(appVersion) (build \(buildNum))"// versionInfo is now something like "2.3.0 (build 17)"
Dodaj as! Stringkoniec na końcu linii appVersionlub buildNum, aby uzyskać tylko tę część jako Stringobiekt. Nie potrzebujesz tego jednak, jeśli szukasz pełnego versionInfo.
Dobrze jest poradzić sobie z systemem kontroli wersji. W ten sposób, gdy otrzymasz raport o błędzie od użytkownika, możesz sprawdzić tę wersję kodu i (mam nadzieję) odtworzyć błąd z dokładnie tym samym kodem co użytkownik.
Chodzi o to, że za każdym razem, gdy robisz kompilację, uruchamiasz skrypt, który pobiera bieżący numer wersji twojego kodu i aktualizuje plik w twoim projekcie (zwykle z pewną formą wymiany tokena). Następnie możesz napisać procedurę obsługi błędów, która zawsze zawiera numer wersji na wyjściu błędu, lub możesz wyświetlić go na stronie „Informacje”.
Odpowiedzi:
Jak tu opisuję , używam skryptu do przepisania pliku nagłówka z moim bieżącym numerem wersji Subversion. Ten numer wersji jest przechowywany w stałej kRevisionNumber. Następnie mogę uzyskać dostęp do wersji i numeru wersji, używając czegoś podobnego do następującego:
który utworzy ciąg formatu „Wersja 1.0 (51)”.
źródło
CFBundleShortVersionString
to, czego normalnie byś chciał dla „wersji” iCFBundleVersion
numeru kompilacji.[NSString stringWithFormat:@"Version: %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]]
Opierając się na odpowiedzi Brada Larsona, jeśli masz dużą i mniejszą wersję informacji przechowywaną w liście informacji (tak jak to zrobiłem w przypadku konkretnego projektu), to działało dobrze dla mnie:
Teraz ręczne przeglądanie mniejszej wersji może być uciążliwe, dlatego użycie sztuczki polegającej na zmianie numeru repozytorium jest idealne. Jeśli tego nie zrobiłeś (tak jak ja nie), powyższy fragment może być przydatny. Wyciąga także nazwę wyświetlaną aplikacji.
źródło
Wersja Swift dla obu osobno:
Szybki 3
Swift 2
Zawiera się w tym repozytorium, sprawdź to:
https://github.com/goktugyil/EZSwiftExtensions
źródło
Tak zrobiłem w mojej aplikacji
Mam nadzieję, że ta prosta odpowiedź pomoże komuś ...
źródło
Możesz określić
CFBundleShortVersionString
ciąg w swojej plist.info i odczytać go programowo za pomocą dostarczonego interfejsu API .źródło
Są dwie rzeczy - wersja kompilacji i wersja aplikacji.
Aby uzyskać wersję aplikacji:
Aby uzyskać wersję kompilacji:
źródło
objectForInfoDictionaryKey:
zamiast tego,infoDictionary] objectForKey:
ponieważ pierwszy zwraca zlokalizowaną wartość (jeśli taka istnieje). Prawdopodobnie nie zrobi to jednak różnicy;)źródło
Zwięzłym sposobem uzyskania ciągu wersji w formacie XYZ jest:
Lub tylko dla XY:
Oba te fragmenty zwracają ciągi, które można przypisać do właściwości tekstowej obiektu etykiety, np
źródło
Możesz spróbować użyć słownika jako: -
źródło
Przeczytaj plik info.plist swojej aplikacji i uzyskaj wartość dla klucza CFBundleShortVersionString. Czytanie info.plist da ci obiekt NSDictionary
źródło
Możesz użyć infoDictionary, który pobiera szczegółowe informacje o wersji z info.plist Twojej aplikacji. Ten kod działa w trybie szybkim 3. Wystarczy wywołać tę metodę i wyświetlić wersję w dowolnym preferowanym elemencie interfejsu użytkownika.
źródło
Swift 5:
Istnieją dwie rzeczy - wersja aplikacji i wersja kompilacji
Aby uzyskać wersję aplikacji:
Aby uzyskać wersję kompilacji:
Dzięki
@Brad Larson♦
dużoźródło
Jeśli potrzebujesz kombinacji obu wersji i numeru kompilacji , oto krótka droga z użyciem Swift 3 :
Dodaj
as! String
koniec na końcu liniiappVersion
lubbuildNum
, aby uzyskać tylko tę część jakoString
obiekt. Nie potrzebujesz tego jednak, jeśli szukasz pełnegoversionInfo
.Mam nadzieję, że to pomoże!
źródło
Na podstawie odpowiedzi @rajat chauhan bez wymuszonego obsady
String
.źródło
Dobrze jest poradzić sobie z systemem kontroli wersji. W ten sposób, gdy otrzymasz raport o błędzie od użytkownika, możesz sprawdzić tę wersję kodu i (mam nadzieję) odtworzyć błąd z dokładnie tym samym kodem co użytkownik.
Chodzi o to, że za każdym razem, gdy robisz kompilację, uruchamiasz skrypt, który pobiera bieżący numer wersji twojego kodu i aktualizuje plik w twoim projekcie (zwykle z pewną formą wymiany tokena). Następnie możesz napisać procedurę obsługi błędów, która zawsze zawiera numer wersji na wyjściu błędu, lub możesz wyświetlić go na stronie „Informacje”.
źródło
Możesz wypróbować tę metodę:
źródło