on master help sign in
Fix message delivery: correct timestamp units and defer acknowledgments

- Fix iOS crash: convert all timestamps from Unix seconds to milliseconds - Server sends timestamps in milliseconds, but client was parsing as seconds - Only TextMessage was affected due to timestamp conversion in applyEvent - ArgumentOutOfRangeException overflow for year 58000+ is now fixed - Defer message acknowledgments to after MVU update processes events - Add CmdAckAndDeliver command to run acks asynchronously post-update - Prevents message loss if app crashes between ack and event processing - Add Mac Catalyst native libsodium library reference - Add diagnostics: pubkey prefix in status line and poll logging

commitab2cbb5c8855c4dcf39a25f81b886c260bb4177b authoriko <mail@iko.soy> dateSat 11 Apr 2026, 15:47 (6 months ago) parent5df6e95
31 files changed+68−60
client/App.fs+36−16 client/Skrepka.fsproj+4 client/Store.fs+14−7 client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.dll client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.pdb client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/_CodeSignature/CodeResources+4−4 client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/NativeLink.cache+1−1 client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/NativeLink.cache.uptodate+1−1 client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.dll client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.pdb client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/_CodeSignature/CodeResources+2−2 client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb client/native/maccatalyst-arm64/libsodium.a client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfo.fs+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfoInputs.cache+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.FileListAbsolute.txt−23 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.sourcelink.json+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll client/obj/Debug/net10.0-ios/iossimulator-arm64/refint/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfo.fs+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfoInputs.cache+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.sourcelink.json+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/ref/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/refint/Skrepka.dll
client/App.fs+36−16
@@ -81,7 +81,7 @@ module App =
8181 | SendFailed of string
8282 | SendOk
8383 | DoSaveContact
84− | PollResult of events: IncomingEvent list * status: PollStatus * cursor: int64
84+ | PollResult of events: IncomingEvent list * ackIds: string list * status: PollStatus * cursor: int64
8585 | CopyPubKey
8686 | DismissError
8787 | StateLoaded of StateLoadResult
@@ -95,6 +95,7 @@ module App =
9595 | CmdConnect of url: string * identity: Identity
9696 | CmdSend of session: Session * recipientHex: string * text: string * messageId: string
9797 | CmdPoll of session: Session * cursor: int64
98+ | CmdAckAndDeliver of session: Session * ackIds: string list * events: IncomingEvent list
9899 | CmdCopyToClipboard of string
99100 | CmdLoadState
100101 | CmdSaveIdentity of Identity
@@ -154,7 +155,7 @@ module App =
154155 match evt.Envelope with
155156 | Envelope.TextMessage(id, body) ->
156157 let message =
157− { Id = id; Body = body; Timestamp = DateTimeOffset.FromUnixTimeSeconds(evt.Timestamp)
158+ { Id = id; Body = body; Timestamp = DateTimeOffset.FromUnixTimeMilliseconds(evt.Timestamp)
158159 IsOutgoing = false; Status = DeliveryStatus.Delivered }
159160 { m with
160161 Contacts =
@@ -221,7 +222,7 @@ module App =
221222 match model.Auth with
222223 | Identified(id, Connecting) ->
223224 let session = { Url = model.ServerUrl; Token = token; Identity = id }
224− { model with Auth = Identified(id, Online token); Page = Conversations; Error = None },
225+ { model with Auth = Identified(id, Online token); Page = Conversations; Error = None; PollStatus = Polling },
225226 [ CmdPoll(session, model.PollCursor) ]
226227 | _ -> model, []
227228
@@ -258,12 +259,15 @@ module App =
258259 | SendFailed err -> { model with Error = Some err }, []
259260 | SendOk -> model, []
260261
261− | PollResult(events, status, newCursor) ->
262+ | PollResult(events, ackIds, status, newCursor) ->
262263 let model' = events |> List.fold applyEvent { model with PollStatus = status; PollCursor = newCursor }
263264
264265 model',
265266 [ match trySession model' with
266− | Some session -> CmdPoll(session, model'.PollCursor)
267+ | Some session ->
268+ if not ackIds.IsEmpty || not events.IsEmpty then
269+ CmdAckAndDeliver(session, ackIds, events)
270+ CmdPoll(session, model'.PollCursor)
267271 | None -> ()
268272 if not events.IsEmpty then saveCmdMsg model' ]
269273
@@ -329,6 +333,8 @@ module App =
329333
330334 // ── mapCmd ──
331335
336+ let private log msg = eprintfn $"[skrepka] {msg}"
337+
332338 let private asyncCmd (op: Async<Msg>) : Cmd<Msg> =
333339 Cmd.ofEffect (fun dispatch ->
334340 async {
@@ -343,13 +349,13 @@ module App =
343349 | Envelope.DeliveryAck ackIds ->
344350 JsonSerializer.Serialize({| ``type`` = "delivery.ack"; id = Guid.NewGuid().ToString(); ack_ids = ackIds |})
345351 | Envelope.ProfileMessage profile ->
346− JsonSerializer.Serialize({| ``type`` = "profile"; id = Guid.NewGuid().ToString(); timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); display_name = profile.DisplayName; bio = profile.Bio; photo = profile.PhotoBase64 |})
352+ JsonSerializer.Serialize({| ``type`` = "profile"; id = Guid.NewGuid().ToString(); timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); display_name = profile.DisplayName; bio = profile.Bio; photo = profile.PhotoBase64 |})
347353
348354 let private sendEnvelope (session: Session) (recipientHex: string) (envelope: Envelope) =
349355 async {
350356 let payload = serializeEnvelope envelope
351357 let blob = Crypto.encrypt session.Identity.PrivKey (Crypto.fromHex recipientHex) payload
352− let ts = DateTimeOffset.UtcNow.ToUnixTimeSeconds()
358+ let ts = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
353359 do! sendMessage session.Url session.Token recipientHex (Crypto.toHex blob) ts
354360 }
355361
@@ -421,8 +427,11 @@ module App =
421427
422428 | CmdPoll(session, cursor) ->
423429 asyncCmd (async {
430+ log $"poll start cursor={cursor}"
424431 try
425432 let! response = poll session.Url session.Token cursor
433+ log $"poll response: {response.Events.Length} events, cursor={response.Cursor}"
434+
426435 let ackIds = response.Events |> Array.map _.Id |> Array.toList
427436
428437 let results =
@@ -430,30 +439,40 @@ module App =
430439 |> Array.choose (fun evt ->
431440 match evt.EventType with
432441 | Message -> Some(decryptEvent session.Identity.PrivKey evt.Payload)
433− | UnknownEvent _ -> None)
442+ | UnknownEvent s -> log $"unknown event type: {s}"; None)
434443
435444 let events = results |> Array.choose Result.toOption |> Array.toList
436445 let errors = results |> Array.choose (function Error e -> Some e | _ -> None) |> Array.toList
437446
438− if not ackIds.IsEmpty then
439− try do! ackMessages session.Url session.Token ackIds
440− with _ -> ()
447+ for e in errors do log $"decrypt error: {e}"
441448
442− do! sendDeliveryAcks session events
449+ if response.Events.Length = 0 then
450+ do! Async.Sleep 5000
443451
444452 let chatCount = events |> List.sumBy (fun e -> match e.Envelope with Envelope.TextMessage _ -> 1 | _ -> 0)
445453 let status =
446454 $"evts:{response.Events.Length} msgs:{chatCount} errs:{errors.Length}"
447455 + (match List.tryHead errors with Some e -> $" [{e}]" | None -> "")
448− return PollResult(events, Received status, response.Cursor)
456+ return PollResult(events, ackIds, Received status, response.Cursor)
449457 with
450458 | :? TimeoutException ->
451− return PollResult([], Polling, cursor)
459+ log "poll timeout"
460+ return PollResult([], [], Polling, cursor)
452461 | ex ->
462+ log $"poll error: {ex.Message}"
453463 do! Async.Sleep 3000
454− return PollResult([], PollError ex.Message, cursor)
464+ return PollResult([], [], PollError ex.Message, cursor)
455465 })
456466
467+ | CmdAckAndDeliver(session, ackIds, events) ->
468+ Cmd.ofEffect (fun _ ->
469+ async {
470+ if not ackIds.IsEmpty then
471+ try do! ackMessages session.Url session.Token ackIds
472+ with _ -> ()
473+ do! sendDeliveryAcks session events
474+ } |> Async.Start)
475+
457476 | CmdCopyToClipboard text ->
458477 Cmd.ofEffect (fun _ ->
459478 Microsoft.Maui.ApplicationModel.DataTransfer.Clipboard.Default.SetTextAsync(text)
@@ -594,7 +613,8 @@ module App =
594613 Button("Settings", SetPage Settings)
595614 }
596615
597− Label($"{connStatusLabel model.Auth} | {formatPollStatus model.PollStatus}")
616+ let pubPrefix = match model.Auth with Identified(id, _) -> id.PubKeyHex.[..7] | _ -> "?"
617+ Label($"{connStatusLabel model.Auth} [{pubPrefix}] | {formatPollStatus model.PollStatus}")
598618 .font(size = 10.)
599619 .textColor(Colors.DimGray)
600620
client/Skrepka.fsproj+4
@@ -54,6 +54,10 @@
5454 <None Include="$(MacCatalystProjectFolder)Info.plist" LogicalName="Info.plist" />
5555 <Compile Include="$(MacCatalystProjectFolder)AppDelegate.fs" />
5656 <Compile Include="$(MacCatalystProjectFolder)Program.fs" />
57+ <NativeReference Include="native/maccatalyst-arm64/libsodium.a">
58+ <Kind>Static</Kind>
59+ <ForceLoad>true</ForceLoad>
60+ </NativeReference>
5761 </ItemGroup>
5862
5963 <ItemGroup>
client/Store.fs+14−7
@@ -61,11 +61,11 @@ module Store =
6161 let private orEmpty s = s |> Option.ofObj |> Option.defaultValue ""
6262
6363 let private toChatMessage (d: MessageDoc) : ChatMessage =
64− { Id = d.Id; Body = d.Body; Timestamp = DateTimeOffset.FromUnixTimeSeconds d.TimestampUnix; IsOutgoing = d.IsOutgoing
64+ { Id = d.Id; Body = d.Body; Timestamp = DateTimeOffset.FromUnixTimeMilliseconds d.TimestampUnix; IsOutgoing = d.IsOutgoing
6565 Status = match d.Status with 1 -> DeliveryStatus.Delivered | _ -> DeliveryStatus.Sent }
6666
6767 let private toMessageDoc convId (m: ChatMessage) : MessageDoc =
68− { Id = m.Id; ConversationId = convId; Body = m.Body; TimestampUnix = m.Timestamp.ToUnixTimeSeconds(); IsOutgoing = m.IsOutgoing
68+ { Id = m.Id; ConversationId = convId; Body = m.Body; TimestampUnix = m.Timestamp.ToUnixTimeMilliseconds(); IsOutgoing = m.IsOutgoing
6969 Status = match m.Status with DeliveryStatus.Delivered -> 1 | DeliveryStatus.Sent -> 0 }
7070
7171 let private openDb () =
@@ -73,9 +73,11 @@ module Store =
7373
7474 let loadIdentity () =
7575 async {
76− let! privKeyB64 =
77− SecureStorage.Default.GetAsync("identity_privkey")
78− |> Async.AwaitTask
76+ let privKeyB64 =
77+ try
78+ SecureStorage.Default.GetAsync("identity_privkey").Result
79+ with _ ->
80+ Preferences.Default.Get<string>("identity_privkey", null)
7981
8082 return
8183 privKeyB64
@@ -84,8 +86,13 @@ module Store =
8486 }
8587
8688 let saveIdentity (identity: Crypto.Identity) =
87− SecureStorage.Default.SetAsync("identity_privkey", Convert.ToBase64String identity.PrivKey)
88− |> Async.AwaitTask
89+ async {
90+ let b64 = Convert.ToBase64String identity.PrivKey
91+ try
92+ do! SecureStorage.Default.SetAsync("identity_privkey", b64) |> Async.AwaitTask
93+ with _ ->
94+ Preferences.Default.Set("identity_privkey", b64)
95+ }
8996
9097 let loadProfile () : Profile option =
9198 try
client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/_CodeSignature/CodeResources+4−4
@@ -166,11 +166,11 @@
166166 </data>
167167 <key>Skrepka.dll</key>
168168 <data>
169− aXUF2yqciArDUpIG8FWUZMDCA1I=
169+ s8PyPwCSNW5n4mLoKbZRYZCdBlQ=
170170 </data>
171171 <key>Skrepka.pdb</key>
172172 <data>
173− 0n3E0Wq5iRv4YZ97OD9CsFBxP7w=
173+ a3E89uVnbY/Utk+yFVM2Lm/t6M4=
174174 </data>
175175 <key>Sodium.Core.dll</key>
176176 <data>
@@ -1393,14 +1393,14 @@
13931393 <dict>
13941394 <key>hash2</key>
13951395 <data>
1396− UGHZWuVltZrNwVaYJ/N9owIgazB1eG0KCdfWAzXXaeg=
1396+ BnNp/p3G9P1OwGp1sytqKQZmoSHqPOpHBozEXJeLvL8=
13971397 </data>
13981398 </dict>
13991399 <key>Skrepka.pdb</key>
14001400 <dict>
14011401 <key>hash2</key>
14021402 <data>
1403− UpSY8oED9rpyHBTZgMHBlVoUdZJQYv8rFhpAlYw8uxk=
1403+ ECnTzLDTEzxOijmAKfSRHGinbYDp0uCvHgxV38eaRxs=
14041404 </data>
14051405 </dict>
14061406 <key>Sodium.Core.dll</key>
client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/NativeLink.cache+1−1
@@ -1 +1 @@
1−12e8ce10c5be9e5289c58b8051e2bffc33b57e85c27f5e6cada36a811eac4be4
1+1af14896b927eee2f53f99fd05e19ebb83adf0fdebf097f41e0305a8d7c98c7b
client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/NativeLink.cache.uptodate+1−1
@@ -1 +1 @@
1−12e8ce10c5be9e5289c58b8051e2bffc33b57e85c27f5e6cada36a811eac4be4
1+1af14896b927eee2f53f99fd05e19ebb83adf0fdebf097f41e0305a8d7c98c7b
client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/_CodeSignature/CodeResources+2−2
@@ -251,14 +251,14 @@
251251 <dict>
252252 <key>hash2</key>
253253 <data>
254− 3LcdsLfdVYuDBW0ymTQh3rdGiQHcuX7ODuir5wWC31E=
254+ ypBM+bfWTNP3ypf/qWbairU8KROoUpHhZHHeZjByNcY=
255255 </data>
256256 </dict>
257257 <key>MonoBundle/Skrepka.pdb</key>
258258 <dict>
259259 <key>hash2</key>
260260 <data>
261− lRWXRbB8uj3FbCIrO8gezrJOD9pFheKChVU0l3hAUww=
261+ ATYHW4k25Jaa72t5xcRmdNXWHA/0w2ny+PJ2Mhu7otM=
262262 </data>
263263 </dict>
264264 <key>MonoBundle/Sodium.Core.dll</key>
client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb

Binary file not shown.

client/native/maccatalyst-arm64/libsodium.anew file

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfo.fs+1−1
@@ -10,7 +10,7 @@ open System.Reflection
1010[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
1111[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
1212[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
13−[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+13fba34bce3f96385873f0ca187ae06eb3948ede")>]
13+[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+5df6e95df9ea5612efd197a45f76769b5039dc65")>]
1414[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
1515[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
1616[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfoInputs.cache+1−1
@@ -1 +1 @@
1−4c5fb9e930282efdfc08d13cf8523ae2e9407e25f7ae4d0f31c1a689a8d11501
1+f21e5289d353238b61edffd7af2a97457c64ee213f0152b0b8dda0cd8c6bc8e3
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.FileListAbsolute.txt−23
@@ -334,26 +334,3 @@
334334/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.genruntimeconfig.cache
335335/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll
336336/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/LiteDB.dll
337−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Fabulous.stamp
338−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Fabulous.MauiControls.stamp
339−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/FSharp.Core.stamp
340−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/LiteDB.stamp
341−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Configuration.Abstractions.stamp
342−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Configuration.stamp
343−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.DependencyInjection.Abstractions.stamp
344−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.DependencyInjection.stamp
345−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Diagnostics.Abstractions.stamp
346−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.FileProviders.Abstractions.stamp
347−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Hosting.Abstractions.stamp
348−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Logging.Abstractions.stamp
349−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Logging.stamp
350−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Options.stamp
351−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Primitives.stamp
352−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.Compatibility.stamp
353−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.stamp
354−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.Xaml.stamp
355−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.stamp
356−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Essentials.stamp
357−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Graphics.stamp
358−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Sodium.Core.stamp
359−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/unpack/Microsoft.Maui.Essentials/BundleResource/xml/microsoft_maui_essentials_fileprovider_file_paths.xml
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.sourcelink.json+1−1
@@ -1 +1 @@
1−{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/13fba34bce3f96385873f0ca187ae06eb3948ede/*"}}
1+{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/5df6e95df9ea5612efd197a45f76769b5039dc65/*"}}
client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/refint/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfo.fs+1−1
@@ -10,7 +10,7 @@ open System.Reflection
1010[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
1111[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
1212[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
13−[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+13fba34bce3f96385873f0ca187ae06eb3948ede")>]
13+[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+5df6e95df9ea5612efd197a45f76769b5039dc65")>]
1414[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
1515[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
1616[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfoInputs.cache+1−1
@@ -1 +1 @@
1−bf686c8aa53e2b74b728dc8168a09d41edb321c94ecbe8bf4e3e21c20a8edd68
1+ce2a46a6bcc0c8aa17bed684b2657f9621a34bc9674677f9c42338c570be5346
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.sourcelink.json+1−1
@@ -1 +1 @@
1−{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/13fba34bce3f96385873f0ca187ae06eb3948ede/*"}}
1+{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/5df6e95df9ea5612efd197a45f76769b5039dc65/*"}}
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/ref/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/refint/Skrepka.dll

Binary file not shown.