Skip to content

Commit 3deb64a

Browse files
committedJan 22, 2025
Finish 3.12.3
1 parent ac565af commit 3deb64a

File tree

18 files changed

+133
-104
lines changed

18 files changed

+133
-104
lines changed
 

‎HabitRPG/Generated/Strings.swift

+2
Original file line numberDiff line numberDiff line change
@@ -2255,6 +2255,8 @@ public enum L10n {
22552255
public static func questParticipantCount(_ p1: Int) -> String {
22562256
return L10n.tr("Mainstrings", "party.quest_participant_count", p1)
22572257
}
2258+
/// 1 Participant
2259+
public static var questParticipantOne: String { return L10n.tr("Mainstrings", "party.quest_participant_one") }
22582260
/// Remove Member
22592261
public static var removeFromParty: String { return L10n.tr("Mainstrings", "party.remove_from_party") }
22602262
/// Are you sure you want to remove %@ from the Party?

‎HabitRPG/Habitica-Info.plist

+1-15
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
</dict>
4040
</array>
4141
<key>CFBundleVersion</key>
42-
<string>1008</string>
42+
<string>1010</string>
4343
<key>CustomDomain</key>
4444
<string>${CUSTOM_DOMAIN}</string>
4545
<key>DisableSSL</key>
@@ -89,20 +89,6 @@
8989
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
9090
<false/>
9191
</dict>
92-
<key>facebook.com</key>
93-
<dict>
94-
<key>NSIncludesSubdomains</key>
95-
<true/>
96-
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
97-
<false/>
98-
</dict>
99-
<key>fbcdn.net</key>
100-
<dict>
101-
<key>NSIncludesSubdomains</key>
102-
<true/>
103-
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
104-
<false/>
105-
</dict>
10692
<key>localhost</key>
10793
<dict>
10894
<key>NSIncludesSubdomains</key>

‎HabitRPG/Repositories/Implementations/SocialRepository.swift

+4-2
Original file line numberDiff line numberDiff line change
@@ -439,9 +439,11 @@ class SocialRepository: BaseRepository<SocialLocalRepository> {
439439
}
440440
}
441441

442-
public func leaveQuest(groupID: String) -> Signal<EmptyResponseProtocol?, Never> {
442+
public func leaveQuest(groupID: String) -> Signal<GroupProtocol?, Never> {
443443
UISelectionFeedbackGenerator.oneShotSelectionChanged()
444-
return LeaveQuestCall(groupID: groupID).objectSignal
444+
return LeaveQuestCall(groupID: groupID).objectSignal.flatMap(.latest) { _ in
445+
self.retrieveGroup(groupID: groupID)
446+
}
445447
}
446448

447449
private func saveQuestState(objectID: String, groupID: String) -> ((QuestStateProtocol?) -> Void) {

‎HabitRPG/Strings/Base.lproj/Mainstrings.strings

+1
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@
538538
"leader" = "Leader";
539539
"party.invited_to_quest" = "%@ invited you to participate in a quest";
540540
"party.quest_number_responded" = "%d/%d Members responded";
541+
"party.quest_participant_one" = "1 Participant";
541542
"party.quest_participant_count" = "%d Participants";
542543
"party.invitation_no_invitername" = "Someone invited you to join the Party **%@**";
543544
"party.invitation_invitername" = "**@%@** invited you to join the Party **%@**";

‎HabitRPG/UI/General/FaintViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ struct FaintView: View {
176176
@State var appear = false
177177
@State var isReviving = false
178178
@State var isUsingPerk = false
179-
@ObservedObject fileprivate var viewModel = ViewModel()
179+
@StateObject fileprivate var viewModel = ViewModel()
180180
private let positions = (0..<6).map { _ in Int.random(in: 5...50) }
181181

182182
var body: some View {

‎HabitRPG/UI/Social/Party/PartyDetailViewController.swift

+11-4
Original file line numberDiff line numberDiff line change
@@ -238,18 +238,25 @@ class PartyDetailViewController: GroupDetailViewController {
238238
questTitleContentView.imageView.setImagewith(name: "inventory_quest_scroll_\(questState.key ?? "")")
239239

240240
partyQuestView.alpha = 1.0
241+
questTitleContentView.imageView.alpha = 1.0
241242
if questState.active {
242243
questTitleSeparator.isHidden = false
243244
questInvitationUserView.isHidden = true
244245
if questState.members.contains(where: { participant -> Bool in
245-
return participant.userID == inventoryRepository.currentUserId
246+
return participant.userID == inventoryRepository.currentUserId && participant.accepted
246247
}) {
247-
questTitleContentView.detailLabel.text = L10n.Party.questParticipantCount(questState.members.filter({ (participant) -> Bool in
248-
return participant.accepted
249-
}).count)
248+
let count = questState.members.filter({ (participant) -> Bool in
249+
return participant.accepted
250+
}).count
251+
if count == 1 {
252+
questTitleContentView.detailLabel.text = L10n.Party.questParticipantOne
253+
} else {
254+
questTitleContentView.detailLabel.text = L10n.Party.questParticipantCount(count)
255+
}
250256
} else {
251257
questTitleContentView.detailLabel.text = L10n.Party.questNotParticipating
252258
partyQuestView.alpha = 0.5
259+
questTitleContentView.imageView.alpha = 0.5
253260
}
254261
} else {
255262
questTitleSeparator.isHidden = true

‎HabitRPG/UI/Social/QuestDetailViewController.swift

+4-2
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class QuestDetailViewController: BaseUIViewController {
181181

182182
if group.quest?.leaderID != userRepository.currentUserId {
183183
leaveButton.isHidden = !(isQuestActive && participants.contains(where: { participant in
184-
return participant.userID == userRepository.currentUserId
184+
return participant.userID == userRepository.currentUserId && participant.accepted
185185
}))
186186
} else {
187187
leaveButton.isHidden = true
@@ -286,7 +286,9 @@ class QuestDetailViewController: BaseUIViewController {
286286
let alertController = HabiticaAlertController(title: nil, message: isQuestActive ? L10n.Quests.confirmLeave : L10n.Quests.confirmLeaveNostart)
287287
alertController.addAction(title: L10n.confirm, style: .default, isMainAction: true, handler: {[weak self] (_) in
288288
if let groupID = self?.groupID {
289-
self?.disposable.inner.add(self?.socialRepository.leaveQuest(groupID: groupID).observeCompleted {})
289+
self?.disposable.inner.add(self?.socialRepository.leaveQuest(groupID: groupID).observeCompleted {
290+
self?.navigationController?.popViewController(animated: true)
291+
})
290292
}
291293
})
292294
alertController.addCancelAction()

‎HabitRPG/Views/Quests/PartyQuestView.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ class PartyQuestView: UIView {
184184

185185
override var intrinsicContentSize: CGSize {
186186
layout()
187-
return CGSize(width: bounds.size.width, height: backgroundView.frame.origin.y + backgroundView.frame.size.height + 12)
187+
let padding: CGFloat = pendingLabel.isHidden ? 12 : 0
188+
return CGSize(width: bounds.size.width, height: backgroundView.frame.origin.y + backgroundView.frame.size.height + padding)
188189
}
189190
}

‎HabitRPG/Views/Stable/FeedSheetView.swift

+51-45
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,41 @@
99
import SwiftUI
1010
import Habitica_Models
1111
import Kingfisher
12+
import ReactiveSwift
1213

1314
private class FeedSheetViewModel: ObservableObject {
1415
@Published var food: [FoodProtocol] = []
15-
@Published var ownedFoods: [String: Int] = [:]
16+
var ownedFoods: [String: Int] = [:]
1617
private let inventoryRepository = InventoryRepository()
1718

1819
init() {
19-
inventoryRepository.getOwnedItems(itemType: "food").on(value: { owned in
20-
self.ownedFoods = Dictionary(uniqueKeysWithValues: owned.value.map { ($0.key ?? "", $0.numberOwned) })
20+
print(self)
21+
inventoryRepository.getOwnedItems(itemType: "food").on(value: {[weak self] owned in
22+
self?.ownedFoods = Dictionary(uniqueKeysWithValues: owned.value.map { ($0.key ?? "", $0.numberOwned) })
2123
})
22-
.flatMap(.latest, { ownedFood in
23-
return self.inventoryRepository.getFood(keys: ownedFood.value.map({ ownedItem in
24+
.flatMap(.latest, {[weak self] ownedFood in
25+
return self?.inventoryRepository.getFood(keys: ownedFood.value.map({ ownedItem in
2426
return ownedItem.key ?? ""
25-
}))
27+
})) ?? SignalProducer.empty
2628
})
27-
.on(value: { food in
28-
self.food = food.value
29+
.on(value: {[weak self] food in
30+
if self?.food.count != food.value.count {
31+
print("Reloading", self?.food.count, food.value.count)
32+
self?.food = food.value
33+
}
2934
}).start()
3035
}
3136
}
3237

3338
struct FeedSheetView: View {
34-
@Environment(\.presentationMode) var presentationMode
35-
@ObservedObject fileprivate var viewModel = FeedSheetViewModel()
39+
@Environment(\.presentationMode)
40+
var presentationMode
41+
@StateObject fileprivate var viewModel = FeedSheetViewModel()
3642
let onFeed: (FoodProtocol) -> Void
3743
var dismissParent: (() -> Void)?
3844

3945
var body: some View {
46+
List {
4047
if viewModel.food.isEmpty {
4148
VStack(spacing: 2) {
4249
Image(uiImage: Asset.Empty.food.image).padding(.bottom, 16)
@@ -51,46 +58,45 @@ struct FeedSheetView: View {
5158
RouterHandler.shared.handle(.market)
5259
}
5360
} else {
54-
List {
55-
Section(content: {
56-
ForEach(viewModel.food, id: \.key) { foodItem in
57-
HStack {
58-
Group {
59-
PixelArtView(name: "Pet_Food_\(foodItem.key ?? "")").frame(width: 68, height: 68)
60-
}.frame(width: 50, height: 50)
61-
Text(foodItem.text ?? "")
62-
.font(.system(.headline))
63-
Spacer()
64-
Text("\(viewModel.ownedFoods[foodItem.key ?? ""] ?? 0)")
65-
.font(.system(.subheadline))
66-
}
67-
.listRowSpacing(0)
68-
.listRowInsets(.none)
69-
.onTapGesture {
70-
onFeed(foodItem)
71-
presentationMode.dismiss()
72-
}
73-
}
74-
}, footer: {
75-
VStack {
76-
Image(uiImage: Asset.shop.image)
77-
Text(L10n.Items.footerFoodTitle).font(.system(size: 16, weight: .semibold)).foregroundStyle(Color(ThemeService.shared.theme.secondaryTextColor))
78-
.padding(.vertical, 1)
79-
Text(AttributedString(L10n.Items.footerFoodDescription).withHighlightWords(words: L10n.Locations.market)).font(.system(size: 14)).foregroundStyle(Color(ThemeService.shared.theme.ternaryTextColor))
61+
Section(content: {
62+
ForEach(viewModel.food, id: \.key) { foodItem in
63+
HStack {
64+
Group {
65+
PixelArtView(name: "Pet_Food_\(foodItem.key ?? "")").frame(width: 68, height: 68)
66+
}.frame(width: 50, height: 50)
67+
Text(foodItem.text ?? "")
68+
.font(.system(.headline))
69+
Spacer()
70+
Text("\(viewModel.ownedFoods[foodItem.key ?? ""] ?? 0)")
71+
.font(.system(.subheadline))
8072
}
81-
.padding(.top, 16)
82-
.multilineTextAlignment(.center)
73+
.listRowSpacing(0)
74+
.listRowInsets(.none)
8375
.onTapGesture {
76+
onFeed(foodItem)
8477
presentationMode.dismiss()
85-
dismissParent?()
86-
RouterHandler.shared.handle(.market)
8778
}
88-
}).listRowBackground(Color(ThemeService.shared.theme.windowBackgroundColor))
89-
}
90-
.scrollContentBackground(.hidden)
91-
.background(Color(ThemeService.shared.theme.contentBackgroundColor))
92-
.listStyle(.insetGrouped)
79+
}
80+
}, footer: {
81+
VStack {
82+
Image(uiImage: Asset.shop.image)
83+
Text(L10n.Items.footerFoodTitle).font(.system(size: 16, weight: .semibold)).foregroundStyle(Color(ThemeService.shared.theme.secondaryTextColor))
84+
.padding(.vertical, 1)
85+
Text(AttributedString(L10n.Items.footerFoodDescription).withHighlightWords(words: L10n.Locations.market)).font(.system(size: 14)).foregroundStyle(Color(ThemeService.shared.theme.ternaryTextColor))
86+
}
87+
.padding(.top, 16)
88+
.multilineTextAlignment(.center)
89+
.onTapGesture {
90+
presentationMode.dismiss()
91+
dismissParent?()
92+
RouterHandler.shared.handle(.market)
93+
}
94+
}).listRowBackground(Color(ThemeService.shared.theme.windowBackgroundColor))
9395
}
96+
}
97+
.scrollContentBackground(.hidden)
98+
.background(Color(ThemeService.shared.theme.contentBackgroundColor))
99+
.listStyle(.insetGrouped)
94100
}
95101
}
96102

‎Habitica Database/Habitica Database.xcodeproj/project.pbxproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@
359359
2902795F2057E957006DACB9 /* RealmFAQEntry.swift */,
360360
295611192057C93200D9711A /* RealmFood.swift */,
361361
2956111F2057D48A00D9711A /* RealmGear.swift */,
362+
299CE6342CCA5C6300ABA85C /* RealmGearSet.swift */,
362363
2956111D2057C9B100D9711A /* RealmHatchingPotion.swift */,
363364
296AC81D20ADDC5900885682 /* RealmInAppReward.swift */,
364365
295611172057C8EB00D9711A /* RealmItem.swift */,
@@ -380,7 +381,6 @@
380381
295611112056EC5C00D9711A /* RealmSkill.swift */,
381382
29DBFEFA20CADB4100DF9CF2 /* RealmSpecialItem.swift */,
382383
290279882058344B006DACB9 /* RealmWorldState.swift */,
383-
299CE6342CCA5C6300ABA85C /* RealmGearSet.swift */,
384384
);
385385
path = Content;
386386
sourceTree = "<group>";

‎Habitica Database/Habitica Database/Repositories/SocialLocalRepository.swift

+20
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public class SocialLocalRepository: BaseLocalRepository {
1919
return
2020
}
2121
save(object: RealmGroup(group))
22+
if let participants = group.quest?.members {
23+
removeOldQuestParticipants(groupID: group.id, participants: participants)
24+
}
2225
}
2326

2427
public func save(objectID: String, groupID: String, questState: QuestStateProtocol) {
@@ -271,6 +274,23 @@ public class SocialLocalRepository: BaseLocalRepository {
271274
}
272275
}
273276

277+
private func removeOldQuestParticipants(groupID: String?, participants: [QuestParticipantProtocol]) {
278+
let oldParticipants = getRealm()?.objects(RealmQuestParticipant.self).filter("groupID == %@", groupID ?? "")
279+
var participantsToRemove = [RealmQuestParticipant]()
280+
oldParticipants?.forEach({ (member) in
281+
if !participants.contains(where: { (participant) -> Bool in
282+
return participant.userID == member.userID
283+
}) {
284+
participantsToRemove.append(member)
285+
}
286+
})
287+
if participantsToRemove.isEmpty == false {
288+
updateCall { realm in
289+
realm.delete(participantsToRemove)
290+
}
291+
}
292+
}
293+
274294
public func getGroup(groupID: String) -> SignalProducer<GroupProtocol?, ReactiveSwiftRealmError> {
275295
return RealmGroup.findBy(query: "id == '\(groupID)'").reactive().map({ (groups, _) -> GroupProtocol? in
276296
return groups.first

‎Habitica Intents/Info.plist

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundleShortVersionString</key>
2020
<string>$(MARKETING_VERSION)</string>
2121
<key>CFBundleVersion</key>
22-
<string>1008</string>
22+
<string>1010</string>
2323
<key>NSExtension</key>
2424
<dict>
2525
<key>NSExtensionAttributes</key>

‎Habitica IntentsUI/Info.plist

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundleShortVersionString</key>
2020
<string>$(MARKETING_VERSION)</string>
2121
<key>CFBundleVersion</key>
22-
<string>1008</string>
22+
<string>1010</string>
2323
<key>NSExtension</key>
2424
<dict>
2525
<key>NSExtensionAttributes</key>

‎Habitica Snapshots/Info.plist

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@
1717
<key>CFBundleShortVersionString</key>
1818
<string>1.0</string>
1919
<key>CFBundleVersion</key>
20-
<string>1008</string>
20+
<string>1010</string>
2121
</dict>
2222
</plist>

‎Habitica Widgets/Info.plist

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundleShortVersionString</key>
2020
<string>$(MARKETING_VERSION)</string>
2121
<key>CFBundleVersion</key>
22-
<string>1008</string>
22+
<string>1010</string>
2323
<key>NSExtension</key>
2424
<dict>
2525
<key>NSExtensionPointIdentifier</key>

‎Habitica.xcodeproj/project.pbxproj

+24-24
Original file line numberDiff line numberDiff line change
@@ -4035,7 +4035,7 @@
40354035
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
40364036
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
40374037
COPY_PHASE_STRIP = YES;
4038-
CURRENT_PROJECT_VERSION = 1008;
4038+
CURRENT_PROJECT_VERSION = 1010;
40394039
ENABLE_NS_ASSERTIONS = NO;
40404040
ENABLE_STRICT_OBJC_MSGSEND = YES;
40414041
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -4071,7 +4071,7 @@
40714071
CODE_SIGN_ENTITLEMENTS = Habitica.entitlements;
40724072
CODE_SIGN_IDENTITY = "iPhone Developer";
40734073
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
4074-
CURRENT_PROJECT_VERSION = 1008;
4074+
CURRENT_PROJECT_VERSION = 1010;
40754075
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO;
40764076
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
40774077
ENABLE_BITCODE = NO;
@@ -4221,7 +4221,7 @@
42214221
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
42224222
CODE_SIGN_STYLE = Automatic;
42234223
COPY_PHASE_STRIP = NO;
4224-
CURRENT_PROJECT_VERSION = 1008;
4224+
CURRENT_PROJECT_VERSION = 1010;
42254225
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
42264226
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
42274227
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4263,7 +4263,7 @@
42634263
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
42644264
CODE_SIGN_STYLE = Automatic;
42654265
COPY_PHASE_STRIP = NO;
4266-
CURRENT_PROJECT_VERSION = 1008;
4266+
CURRENT_PROJECT_VERSION = 1010;
42674267
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
42684268
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
42694269
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4307,7 +4307,7 @@
43074307
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
43084308
CODE_SIGN_STYLE = Automatic;
43094309
COPY_PHASE_STRIP = NO;
4310-
CURRENT_PROJECT_VERSION = 1008;
4310+
CURRENT_PROJECT_VERSION = 1010;
43114311
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
43124312
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
43134313
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4346,7 +4346,7 @@
43464346
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
43474347
CODE_SIGN_STYLE = Automatic;
43484348
COPY_PHASE_STRIP = NO;
4349-
CURRENT_PROJECT_VERSION = 1008;
4349+
CURRENT_PROJECT_VERSION = 1010;
43504350
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
43514351
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
43524352
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4399,7 +4399,7 @@
43994399
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
44004400
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
44014401
COPY_PHASE_STRIP = YES;
4402-
CURRENT_PROJECT_VERSION = 1008;
4402+
CURRENT_PROJECT_VERSION = 1010;
44034403
ENABLE_NS_ASSERTIONS = NO;
44044404
ENABLE_STRICT_OBJC_MSGSEND = YES;
44054405
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -4435,7 +4435,7 @@
44354435
CODE_SIGN_ENTITLEMENTS = Habitica.entitlements;
44364436
CODE_SIGN_IDENTITY = "iPhone Developer";
44374437
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
4438-
CURRENT_PROJECT_VERSION = 1008;
4438+
CURRENT_PROJECT_VERSION = 1010;
44394439
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO;
44404440
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
44414441
ENABLE_BITCODE = NO;
@@ -4585,7 +4585,7 @@
45854585
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
45864586
CODE_SIGN_STYLE = Automatic;
45874587
COPY_PHASE_STRIP = NO;
4588-
CURRENT_PROJECT_VERSION = 1008;
4588+
CURRENT_PROJECT_VERSION = 1010;
45894589
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
45904590
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
45914591
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4627,7 +4627,7 @@
46274627
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
46284628
CODE_SIGN_STYLE = Automatic;
46294629
COPY_PHASE_STRIP = NO;
4630-
CURRENT_PROJECT_VERSION = 1008;
4630+
CURRENT_PROJECT_VERSION = 1010;
46314631
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
46324632
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
46334633
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4671,7 +4671,7 @@
46714671
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
46724672
CODE_SIGN_STYLE = Automatic;
46734673
COPY_PHASE_STRIP = NO;
4674-
CURRENT_PROJECT_VERSION = 1008;
4674+
CURRENT_PROJECT_VERSION = 1010;
46754675
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
46764676
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
46774677
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4710,7 +4710,7 @@
47104710
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
47114711
CODE_SIGN_STYLE = Automatic;
47124712
COPY_PHASE_STRIP = NO;
4713-
CURRENT_PROJECT_VERSION = 1008;
4713+
CURRENT_PROJECT_VERSION = 1010;
47144714
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
47154715
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
47164716
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4741,7 +4741,7 @@
47414741
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
47424742
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
47434743
CODE_SIGN_STYLE = Automatic;
4744-
CURRENT_PROJECT_VERSION = 1008;
4744+
CURRENT_PROJECT_VERSION = 1010;
47454745
DEBUG_INFORMATION_FORMAT = dwarf;
47464746
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
47474747
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4775,7 +4775,7 @@
47754775
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
47764776
CODE_SIGN_STYLE = Automatic;
47774777
COPY_PHASE_STRIP = NO;
4778-
CURRENT_PROJECT_VERSION = 1008;
4778+
CURRENT_PROJECT_VERSION = 1010;
47794779
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
47804780
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
47814781
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4812,7 +4812,7 @@
48124812
CODE_SIGN_IDENTITY = "iPhone Developer";
48134813
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
48144814
CODE_SIGN_STYLE = Automatic;
4815-
CURRENT_PROJECT_VERSION = 1008;
4815+
CURRENT_PROJECT_VERSION = 1010;
48164816
DEBUG_INFORMATION_FORMAT = dwarf;
48174817
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
48184818
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4859,7 +4859,7 @@
48594859
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
48604860
CODE_SIGN_STYLE = Automatic;
48614861
COPY_PHASE_STRIP = NO;
4862-
CURRENT_PROJECT_VERSION = 1008;
4862+
CURRENT_PROJECT_VERSION = 1010;
48634863
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
48644864
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
48654865
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4900,7 +4900,7 @@
49004900
CODE_SIGN_IDENTITY = "iPhone Developer";
49014901
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
49024902
CODE_SIGN_STYLE = Automatic;
4903-
CURRENT_PROJECT_VERSION = 1008;
4903+
CURRENT_PROJECT_VERSION = 1010;
49044904
DEBUG_INFORMATION_FORMAT = dwarf;
49054905
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
49064906
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4943,7 +4943,7 @@
49434943
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
49444944
CODE_SIGN_STYLE = Automatic;
49454945
COPY_PHASE_STRIP = NO;
4946-
CURRENT_PROJECT_VERSION = 1008;
4946+
CURRENT_PROJECT_VERSION = 1010;
49474947
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
49484948
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
49494949
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -4984,7 +4984,7 @@
49844984
CODE_SIGN_IDENTITY = "iPhone Developer";
49854985
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
49864986
CODE_SIGN_STYLE = Automatic;
4987-
CURRENT_PROJECT_VERSION = 1008;
4987+
CURRENT_PROJECT_VERSION = 1010;
49884988
DEBUG_INFORMATION_FORMAT = dwarf;
49894989
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
49904990
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -5029,7 +5029,7 @@
50295029
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
50305030
CODE_SIGN_STYLE = Automatic;
50315031
COPY_PHASE_STRIP = NO;
5032-
CURRENT_PROJECT_VERSION = 1008;
5032+
CURRENT_PROJECT_VERSION = 1010;
50335033
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
50345034
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
50355035
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -5235,7 +5235,7 @@
52355235
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
52365236
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
52375237
COPY_PHASE_STRIP = NO;
5238-
CURRENT_PROJECT_VERSION = 1008;
5238+
CURRENT_PROJECT_VERSION = 1010;
52395239
ENABLE_STRICT_OBJC_MSGSEND = YES;
52405240
ENABLE_TESTABILITY = YES;
52415241
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -5298,7 +5298,7 @@
52985298
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
52995299
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
53005300
COPY_PHASE_STRIP = YES;
5301-
CURRENT_PROJECT_VERSION = 1008;
5301+
CURRENT_PROJECT_VERSION = 1010;
53025302
ENABLE_NS_ASSERTIONS = NO;
53035303
ENABLE_STRICT_OBJC_MSGSEND = YES;
53045304
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -5334,7 +5334,7 @@
53345334
CODE_SIGN_ENTITLEMENTS = Habitica.entitlements;
53355335
CODE_SIGN_IDENTITY = "iPhone Developer";
53365336
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
5337-
CURRENT_PROJECT_VERSION = 1008;
5337+
CURRENT_PROJECT_VERSION = 1010;
53385338
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO;
53395339
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
53405340
ENABLE_BITCODE = NO;
@@ -5408,7 +5408,7 @@
54085408
CODE_SIGN_ENTITLEMENTS = Habitica.entitlements;
54095409
CODE_SIGN_IDENTITY = "iPhone Developer";
54105410
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
5411-
CURRENT_PROJECT_VERSION = 1008;
5411+
CURRENT_PROJECT_VERSION = 1010;
54125412
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO;
54135413
DEVELOPMENT_TEAM = 9Q9SMRMCNN;
54145414
ENABLE_BITCODE = NO;

‎HabiticaTests/Info.plist

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>
22-
<string>1008</string>
22+
<string>1010</string>
2323
</dict>
2424
</plist>

‎fastlane/changelog.txt

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
New in 3.10:
2-
- Support for upcoming events and content
3-
- Updated avatar customization interface to support new events and content
4-
- Other various bug fixes and interface improvements
1+
New in 3.12.3:
2+
3+
- We improved the clarity around leaving Quests and Parties
4+
- Fixed a bug that prevented accounts from leaving Quests
5+
- Fixed a crash caused by improperly formatted Markdown in some languages
6+
- Various other bug fixes and improvements

0 commit comments

Comments
 (0)
Please sign in to comment.