Compare commits
	
		
			709 Commits
		
	
	
		
			e367fc3f5c
			...
			v3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 01cc71fd47 | |||
| a2b0cd0b6a | |||
| 7f971bcee3 | |||
| 7de98a1731 | |||
| b52eb95b14 | |||
| b3ef7d6ad0 | |||
| d28c11940d | |||
| 504322c2dd | |||
| a07ec3ca36 | |||
| d96691e920 | |||
| 6273b2d917 | |||
| ab90d244b5 | |||
| dc6af6d9e5 | |||
| 0ca801d963 | |||
| 3edcdd72af | |||
| 402bb3fe04 | |||
| 8ba55eb1be | |||
| 983ae2a1fc | |||
| 6fc94001b3 | |||
| 44dbcfdc94 | |||
| b57caf56db | |||
| dbcd1b6d36 | |||
| a8055de910 | |||
| 49b15e7674 | |||
| e2369c40db | |||
| 44c5d91620 | |||
| 7a5a2407b7 | |||
| 234434f102 | |||
| 9c3b228d02 | |||
| 82682cae9a | |||
| fcbd5fe680 | |||
| ad91b17af7 | |||
| 24fa637329 | |||
| 926ae5402f | |||
| 1a37d384e6 | |||
| d4cf598f69 | |||
| 0106c08891 | |||
| 9697def808 | |||
| 6572875229 | |||
| 66590b9079 | |||
| 08b9604b55 | |||
| 0602bbd277 | |||
| 76e7ba7898 | |||
| 6e6616b236 | |||
| 071d51b25e | |||
| a958362461 | |||
| 6749bb00fe | |||
| 11fb20c673 | |||
| a7990f83db | |||
| 5f4cdf7937 | |||
| 3330ca14dd | |||
| 1719b1c8fe | |||
| 3c2c51bfaf | |||
| 239d6750ff | |||
| 8b0c91977a | |||
| f74cca8464 | |||
| 08091d51bf | |||
| 481190811b | |||
| 4b32b65d1c | |||
| 50ac7109bb | |||
| 62da279c71 | |||
| fde6dbf891 | |||
| 613bf4fb42 | |||
| 00ae586016 | |||
| ea0d132dce | |||
| aa2df1e847 | |||
| 50672795f3 | |||
| 383de9568d | |||
| 01fa228e45 | |||
| 1e71ad33a6 | |||
| 92c0260ecd | |||
| 0a161ad255 | |||
| c003f27b9a | |||
| 19db8309c4 | |||
| aa72ce08e8 | |||
| 4639b00b86 | |||
| cc5460ea55 | |||
| eafac811e6 | |||
| e3be691596 | |||
| aa180a1358 | |||
| c2707b8af1 | |||
| 62fd0500f3 | |||
| eeae865cc8 | |||
| cdf1413fe0 | |||
| 327b4c04f1 | |||
| bd903ce29c | |||
| 1b8ecb15ce | |||
| d4e380a97a | |||
| 126048b4fa | |||
| 8bec18813d | |||
| 1ae81794b1 | |||
| 2a7d12de48 | |||
| 64c60ead48 | |||
| 001549b190 | |||
| 4595865ad3 | |||
|  | 1834643167 | ||
|  | 0e816eaa3e | ||
|  | 7c1f24b824 | ||
| c6594ea2ce | |||
| 3bec6e683e | |||
| 83e92e2eed | |||
|  | b7d44d96ba | ||
| a83b929d42 | |||
| 9423affa75 | |||
| cda23db609 | |||
| 61074bc5a3 | |||
| 5feafa9255 | |||
| e604577c1f | |||
| af0ddd1273 | |||
| 8a6bb34808 | |||
| 4ef8445c77 | |||
| ec39ad6ca3 | |||
| eabb3154f1 | |||
| 910bf20eef | |||
| 5efa9b2ae8 | |||
| dd3e39e891 | |||
| b6896ded23 | |||
| f28a73ff9c | |||
| a014b64235 | |||
| 7e0e7c20d7 | |||
| 389fa515ba | |||
| 681ead02eb | |||
| 8d1c145b0b | |||
| 51b4754182 | |||
| 8a2b321701 | |||
| f685a7a249 | |||
| 76009147e9 | |||
| ce12f28e56 | |||
| 3604373a1e | |||
| 9704a4c2c7 | |||
| 67def56ad1 | |||
| 1be33916af | |||
| e8ff1bfd22 | |||
| 3ae56f3d89 | |||
| 707143e998 | |||
| 1fd34eb2a3 | |||
| d7ca41e946 | |||
| ad9fb0719a | |||
| e2d315afd4 | |||
| 6124dbfd79 | |||
| 5327f04ec0 | |||
| 41c56a2319 | |||
| f9d033542e | |||
| 91784e65e6 | |||
| 9d39c6a825 | |||
| 537e49f1a4 | |||
| 75bbd4df71 | |||
| 6ef4580d93 | |||
| 6ffd498761 | |||
| 27157e7cc1 | |||
| bbb07d574a | |||
| c660a419e2 | |||
| c3f61467c8 | |||
| 9bc47df452 | |||
| 9ef8ca4d45 | |||
| b55cbd08d1 | |||
| 8c6bd0feaa | |||
| 7dd4b20628 | |||
| fec0cb7640 | |||
| 75deb04a2b | |||
| 7c7ed21a96 | |||
| a201f20793 | |||
| 598c51bc1a | |||
| e1ea61c5f1 | |||
| ac424bde36 | |||
| b43b70df3f | |||
| 4321aa621a | |||
| d5d275fb43 | |||
| 6bb3307144 | |||
| 391604d4a2 | |||
| 1d9361c12f | |||
| a129b9cdd0 | |||
| 3bf815ac61 | |||
| 77bae4d6fd | |||
| 0a301c4c9b | |||
| 27b390a51c | |||
| 018386d14e | |||
| 3825d7c6c7 | |||
| bf930291e4 | |||
| a8c4988790 | |||
| 28dd204b1a | |||
| 3cbc1a59a7 | |||
| 277e9ae3d1 | |||
| 27b3ca25b7 | |||
| f871cd3b62 | |||
| a8a59ee30c | |||
| 2cd1416a13 | |||
| 6be7dfbc61 | |||
| 1abbd85614 | |||
| 31ac5ad07c | |||
| ae2ba495e9 | |||
| 637aa44548 | |||
| 44dbfc36d9 | |||
| 5dbe7371cb | |||
| 6c91093198 | |||
| 3f640b7898 | |||
| 7db164fda6 | |||
| 6df1d96cc9 | |||
| 122a796f8c | |||
| fbc7812a16 | |||
| 0b1a23e81a | |||
| c87e6cfe07 | |||
| 53d51b8a0e | |||
| 337ae39e08 | |||
| 8fe3a664a6 | |||
| 3bfc0b8181 | |||
| ac2951479b | |||
| 2bfd13d843 | |||
| 28db6f9f01 | |||
| a4f7b8415d | |||
| 2255d3d591 | |||
| 97792ae734 | |||
| a5d13250cc | |||
| de9e235d0c | |||
| 56fb5451cd | |||
| 870de961f5 | |||
| 22bf6d1c33 | |||
| 5b62f89531 | |||
| b1326d8f04 | |||
| fffca4a78c | |||
| 42bd7f97cb | |||
| 6377856ae0 | |||
| 0f1c52b9e3 | |||
| 6ed6f60fbc | |||
| e65a414065 | |||
| 214d5c4a53 | |||
| fe33931304 | |||
| 113309257e | |||
| b95a8b2ed2 | |||
|  | e922971a5e | ||
| 9d5b71bead | |||
| 890efa2efb | |||
| 674097e425 | |||
| 3379dcb7f3 | |||
| eb5a849e1f | |||
| 4981a23e8e | |||
| c64d4bacb6 | |||
| 838d18013b | |||
| 3f7902e463 | |||
| 54560ad5d8 | |||
| 0c729db639 | |||
| 1fbaac8d88 | |||
| b9dc724f0b | |||
| a2cc55696f | |||
| e79f857feb | |||
| affba29c04 | |||
| 756746b144 | |||
| 28b6eade48 | |||
| 1de7ef8c96 | |||
| 67eac5dcf5 | |||
| 7a44bfa075 | |||
| 1c2f25a152 | |||
| be26ea280e | |||
| b4996d069f | |||
| bf4892b34d | |||
| 5f84751fd5 | |||
| 457d1bac60 | |||
| 02ec11845b | |||
| 612f1bf004 | |||
| fd80b713ad | |||
| 508805368c | |||
| 98eb28a4ec | |||
| d1a2f59dd1 | |||
| bb9adb963a | |||
| 83e40cd860 | |||
| c06fb12f6a | |||
| 6600cf4df8 | |||
| 4293daaa2f | |||
| 866674ddde | |||
| 27d478ba4f | |||
| cccade763f | |||
| f760b85186 | |||
| e68c5f4f92 | |||
| b0f3b6b5c3 | |||
| cb2af379fa | |||
| 38f8103265 | |||
| 06bb18bdaa | |||
| 84c38500d0 | |||
| 9529bbf08b | |||
| 8baf77bcf7 | |||
| b2ac5fbef2 | |||
| c79b1d7aab | |||
|  | 4f55a8209c | ||
|  | ace302111a | ||
|  | 1391fa0dde | ||
|  | cbdc7acdcd | ||
|  | b80d91825a | ||
|  | 1a703b7eba | ||
|  | 3621ea7744 | ||
|  | b638343f02 | ||
|  | 269a64cabb | ||
| 406e5187a8 | |||
| 9bdd08d8dd | |||
| d737232dcf | |||
| c9d751479e | |||
| a2c2bfe585 | |||
| c7f9da0dee | |||
|  | a243cda1df | ||
|  | 7b238f32fd | ||
| 313af28d7f | |||
| c64e1e208c | |||
| c9b07a9a2a | |||
| 55c0e355f1 | |||
| be414891ec | |||
| 787876ab6a | |||
| 8578cde620 | |||
| 14d55d45a8 | |||
| 724391584e | |||
| 3a5e45808a | |||
| 488055955c | |||
|  | 313ebc64cc | ||
|  | 1ed8b1d0c1 | ||
| 4af816d931 | |||
| 1c058a4323 | |||
| 461ed1fcda | |||
| 5363afa558 | |||
| f0d2737da8 | |||
| 1f2f80aa3e | |||
| 240a872e65 | |||
| c1ec6f0849 | |||
| ab42686d4d | |||
| c9727e92b8 | |||
| 9b8768061d | |||
| 0949f0da54 | |||
| 215ca705ac | |||
| 03457af04a | |||
| 73c6a1febf | |||
| ba8d30bcde | |||
| 8449658b47 | |||
| c7f417234e | |||
| 6c847ee1e1 | |||
| 18ad4d376e | |||
| c4d5ba5c9d | |||
| 1069669049 | |||
| aa648fec62 | |||
| 541900673a | |||
| 265502ffd0 | |||
| 3bd79350d1 | |||
| 5294d1fb23 | |||
| ec1269dcf1 | |||
| edb0a25f34 | |||
| 7cd10118cc | |||
| fcddc8f345 | |||
| 1cc34240da | |||
| 013f7f02bc | |||
| 4e79e4100f | |||
| feda1f067f | |||
| fe0e192a43 | |||
| 93df294142 | |||
| 78d65c39f3 | |||
| 18b0dbd797 | |||
| 80cc8cbb40 | |||
| 646e95a9fc | |||
| 6f9d51673b | |||
| f8c6887769 | |||
| cd2a507b7f | |||
| 3cafce00a2 | |||
| 837f3fbe98 | |||
| ca7cc5d7ee | |||
| ef2c14daa2 | |||
| 3a17837cc6 | |||
| 2617a64acf | |||
| afe1e12a3b | |||
| be80f5ff85 | |||
| 3281d69eba | |||
| 77b6ce9937 | |||
| 39275f61b5 | |||
| 72193ba8f3 | |||
| 98dd9b6617 | |||
| a22b94a263 | |||
| 9c75eafdb3 | |||
| 28fda3d0c7 | |||
| 187c2ea43e | |||
| ae7d967461 | |||
| 1ce71f1fa1 | |||
| 9b68808c77 | |||
|  | 99b7bf8199 | ||
|  | eb9bb73c31 | ||
|  | a8c3830d67 | ||
|  | 07a5a19141 | ||
| ecc100ac45 | |||
| 573b76d3ff | |||
| f7dad5e419 | |||
| 9f2f1c0848 | |||
| 580d9fd979 | |||
| 3b375abc09 | |||
| c527b5e67c | |||
| e9f09bbe54 | |||
| 3aece9316c | |||
| a61c889c6c | |||
| 0dd3221a56 | |||
| 66918521f8 | |||
| bb1846e462 | |||
| a976a6eaf4 | |||
| 4252f66fd3 | |||
| f2d780b48f | |||
| 300541f9bb | |||
| 43787bb813 | |||
| 3417c51a3b | |||
| f98e603e82 | |||
| c9b71701c8 | |||
| 28e98488f1 | |||
| b4d476613e | |||
| b48a1aac44 | |||
| 596d212593 | |||
| 54f290327e | |||
| 16f248ceab | |||
| 856d811187 | |||
| d07b194c04 | |||
| 2554b58be6 | |||
| a627b5838e | |||
| c479a9f381 | |||
| 02057e663b | |||
| 6501594100 | |||
| c6599edc3d | |||
| 709a0620b6 | |||
| f9b2a96c7c | |||
| 4dca6189cb | |||
| c7f5b63fe5 | |||
| 96c2f45c85 | |||
| 06f04eb3a5 | |||
| 8af97e43b4 | |||
| d1e8234b93 | |||
| a03d6015a6 | |||
| 246ac52d0a | |||
| abf395ff9a | |||
| 4fdc8eb1d0 | |||
| d7dcde898c | |||
| f85484d3ed | |||
| 5060bd30c9 | |||
| 3959f2260b | |||
| 6f4f1216ad | |||
| f401ffbf81 | |||
| 0251697951 | |||
| 178c12b893 | |||
| 4beda9200e | |||
| 7dfe411053 | |||
| 1232318a5d | |||
|  | 56f41b6c0e | ||
|  | 3ea717d25a | ||
| 1fe4889460 | |||
| cdf2722268 | |||
| a127b5bace | |||
| b2097cf044 | |||
| 701f29748d | |||
| 9e40ed4600 | |||
| c90e6fe661 | |||
| 569483300d | |||
| bab602d98b | |||
| b4f2bb803a | |||
| 03bfed6f46 | |||
| f98e5a0aec | |||
| 3d473e2fec | |||
| 0b6efa373a | |||
| 9b60e96cde | |||
| 81cd9b2082 | |||
| 923d5d7514 | |||
| 7169aff841 | |||
| fac3efb50c | |||
| e809aadaea | |||
| f33b569221 | |||
| e5f2e2d146 | |||
| 11368d064f | |||
| 246b163aec | |||
| 10e0d2fe5f | |||
| 99e10cb612 | |||
| 1db6941431 | |||
| 8370da4fe3 | |||
| 2bdf7029e9 | |||
| 86682a3a9a | |||
| c3925e81b5 | |||
| 6f1f488490 | |||
| 31b2de2e46 | |||
| 412dcfa62a | |||
| ffdc7e81ae | |||
| 1d3357803d | |||
| 6c48aa2356 | |||
| 466e354679 | |||
| 5d4b896f70 | |||
| a04dffdfe8 | |||
| ff871943cf | |||
| 1a892ab227 | |||
| af1b303211 | |||
| 6fd702eba8 | |||
| d220d43cd2 | |||
| 6892afb974 | |||
| 007b46b080 | |||
| 67d130dc34 | |||
| 7e923c77fe | |||
| a593b52812 | |||
|  | 520dc80303 | ||
| 001897bbcd | |||
|  | bab29c23e3 | ||
| 76b39f2df3 | |||
| 509b3e145b | |||
| 2b80ebc2d0 | |||
| 0ab908dd2a | |||
| 6007467e7a | |||
| 3745157c42 | |||
| 94481ec7bd | |||
| fbfe8cbdee | |||
| fbbab0a981 | |||
| ae2fb3b303 | |||
| 3d7a4666ed | |||
| 5d3e0fb800 | |||
| 85ff52a661 | |||
| da7fd64a43 | |||
| 3902633217 | |||
| f478ea8b84 | |||
| 0f481aff5b | |||
| 7a31663310 | |||
| 0239c53c04 | |||
| 16987c758e | |||
| 3a36915140 | |||
| 4bde708878 | |||
| 2f0cf560f8 | |||
| cf355a95fd | |||
| 2f43073172 | |||
| 8236d31ecc | |||
| 459a7dade0 | |||
| e6000a660a | |||
| 75abaac205 | |||
| 603d5c3f73 | |||
| 4e4bd99598 | |||
| d1fbe5f15e | |||
| c061ef2132 | |||
| c378309bdd | |||
| b2c5d64fc5 | |||
|  | 5371637b16 | ||
| c5cbf0af37 | |||
| 1a31e22450 | |||
|  | 49db54529d | ||
| 8e0c0c6054 | |||
| f3d1183076 | |||
| a9f7f0cce0 | |||
| f2943f8411 | |||
| 808e7dcffa | |||
| 9bed4fa6fb | |||
| e6255a340b | |||
| 78bf319fb7 | |||
| 36a966d582 | |||
| f72b268d36 | |||
| 44ef31034e | |||
| 229dc2186f | |||
| a2f9a1efb4 | |||
|  | 823e3c5de6 | ||
|  | faac7bac35 | ||
| 1fac1bfe02 | |||
| 9394b1d9c8 | |||
| 43dd13bac4 | |||
| 65bc372103 | |||
| 6558854a7a | |||
| 892035ab27 | |||
| 87ae8d2ff4 | |||
| 15c2dbaa0d | |||
| 6b3338b885 | |||
| bb00b1bc6a | |||
| 5e1a15ada2 | |||
| 9bdf8ba346 | |||
| 204c087f29 | |||
| 1def3e1895 | |||
| 550c74e544 | |||
| a39565f012 | |||
| aa9755e6a7 | |||
| b25e8d661a | |||
| 4b253ac3ec | |||
| 5d1b875d3c | |||
| e2e103fa67 | |||
| 43c90da4e3 | |||
| fa210dd98f | |||
| 43d9ca92bf | |||
| 5e592c143f | |||
| 0c59816f26 | |||
| 19c2457895 | |||
| af8d87857e | |||
| d05f63a36a | |||
| e2dc520012 | |||
| cff9c15e31 | |||
| f00135c4bf | |||
| 30b8a6c30f | |||
| b9c4ee31b1 | |||
| 87870af866 | |||
| b83cb0fb0b | |||
| 7fd1fe34e5 | |||
| 1c18330891 | |||
| d320879ad0 | |||
| 950150e119 | |||
| 3c4a9767e1 | |||
| 5df2445f3f | |||
| 56543d7b4c | |||
| 4c6fea1242 | |||
| fff43de9e3 | |||
| b31a915544 | |||
| 8956723ac5 | |||
| ccc3ac415e | |||
| 8c47a59b80 | |||
| a6d869ebf6 | |||
| f3a8699389 | |||
| d345c00e84 | |||
| a706f127b6 | |||
| 680ece0b6a | |||
| b976c6ed37 | |||
| 6ae6b132de | |||
| 95aec7c95b | |||
| edd760fbcb | |||
| ba269dbbb8 | |||
| 1aa45dd9f1 | |||
| 92685d7410 | |||
| c8e351514d | |||
| f3900825e3 | |||
| 2cc6652f75 | |||
| 4d4409de2e | |||
| e1286c797f | |||
| bec037622f | |||
| a0d8c1a9b3 | |||
| 26135d2116 | |||
| 71b67fd22d | |||
| 855072dfea | |||
| b39e2e2d64 | |||
| 84b1d6a346 | |||
| 28335dd548 | |||
| 7253e2d3ef | |||
| 4d489425fa | |||
| 890a8a44cf | |||
| 8e3583f57a | |||
| d0ff14659f | |||
| 1f7caaeaac | |||
| 9f9f42071a | |||
| 6bd6e994cb | |||
| 02e68d76ee | |||
| d04b06089c | |||
| 9be6fea2e0 | |||
| 6b1214a06f | |||
| 4597373ac9 | |||
| 047c8d93aa | |||
| 715f95ca22 | |||
| ba709012d7 | |||
| fd186f8391 | |||
| 262d36cd2d | |||
| f320855348 | |||
| ed90152462 | |||
| 6e5c5f1690 | |||
| 7c92dee097 | |||
| e4bb031138 | |||
| 97226ae96b | |||
| d8cd33e79a | |||
| 5ecd39b6a9 | |||
| 8854305e99 | |||
| 903cade296 | |||
| e48410a528 | |||
| 170ea4f2c0 | |||
| 19f0e11384 | |||
| 80bf6c3bbe | |||
| 8352ce8b5b | |||
| c06abf6e42 | |||
| 37cc0a5291 | |||
| 25ae18d6a9 | |||
| 18db50d80c | |||
| 903008d397 | |||
| 4499d4ec8e | |||
| 3a4faac8cb | |||
| e6c58b7b63 | |||
| a7454edec0 | |||
| cbf1952eb7 | |||
| 6d06f0a1b4 | |||
| f2d2a9efd8 | |||
| d44c8217b0 | |||
| 446c33d8b0 | |||
| 996462f1fd | |||
| 778f6bb79f | |||
| 8747f948b9 | |||
| 9546d6e4b8 | |||
| f8d1940af6 | |||
| b2b0891d24 | |||
| 274168d4bc | |||
| 2c98b348d5 | |||
| afc7887ddd | |||
| 99ff78a3d5 | |||
| 2ad85addf6 | |||
| 552b4b2572 | |||
| 594ac39e3d | |||
| 23321171f3 | |||
| ee72d79c93 | |||
| a20c2598fc | |||
| 2eba871a6d | |||
| 46919dec31 | |||
| 9dd6cffe0c | |||
| 2ea9f5e907 | |||
| 050750a808 | |||
| f479b9fc8b | |||
| 13ea182707 | |||
| 14183a7316 | |||
| 9fc9b87608 | |||
| 53c2445ba9 | |||
| d414695eb3 | |||
|  | 27bc17079e | ||
|  | 295188459b | ||
|  | 66115258a7 | ||
|  | 2cf2c515b4 | ||
|  | 925cb2b423 | ||
|  | 0a2804a404 | ||
|  | 12bbcbf69c | ||
|  | 52ce490725 | ||
| 82067fb3aa | |||
| 007acedf29 | |||
| 8e903ec6c1 | |||
| b55e56c3c4 | |||
| 6f9de431b1 | |||
| a8efd26262 | 
							
								
								
									
										11
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -41,6 +41,15 @@ jobs: | |||||||
|         with: |         with: | ||||||
|           name: build-output-windows |           name: build-output-windows | ||||||
|           path: build/windows/x64/runner/Release |           path: build/windows/x64/runner/Release | ||||||
|  |       - name: Compile Installer | ||||||
|  |         uses: Minionguyjpro/Inno-Setup-Action@v1.2.2 | ||||||
|  |         with: | ||||||
|  |           path: setup.iss | ||||||
|  |       - name: Archive installer artifacts | ||||||
|  |         uses: actions/upload-artifact@v4 | ||||||
|  |         with: | ||||||
|  |           name: build-output-windows-installer | ||||||
|  |           path: Installer/windows-x86_64-setup.exe | ||||||
|   build-linux: |   build-linux: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
| @@ -59,7 +68,7 @@ jobs: | |||||||
|           sudo apt-get install -y libnotify-dev |           sudo apt-get install -y libnotify-dev | ||||||
|           sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev |           sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev | ||||||
|           sudo apt-get install -y gstreamer-1.0 |           sudo apt-get install -y gstreamer-1.0 | ||||||
|           sudo apt-get install -y libsecret-1-0 |           sudo apt-get install -y libsecret-1-dev | ||||||
|       - run: flutter pub get |       - run: flutter pub get | ||||||
|       - run: flutter build linux |       - run: flutter build linux | ||||||
|       - name: Archive production artifacts |       - name: Archive production artifacts | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -12,6 +12,9 @@ | |||||||
| .swiftpm/ | .swiftpm/ | ||||||
| migrate_working_dir/ | migrate_working_dir/ | ||||||
|  |  | ||||||
|  | # Inno Setup | ||||||
|  | Installer/ | ||||||
|  |  | ||||||
| # IntelliJ related | # IntelliJ related | ||||||
| *.iml | *.iml | ||||||
| *.ipr | *.ipr | ||||||
|   | |||||||
| @@ -14,13 +14,13 @@ The backend of the Solar Network is written in Go and is a microservices app. Th | |||||||
|  |  | ||||||
| ## Commit Messages | ## Commit Messages | ||||||
|  |  | ||||||
| We're using the gitmoji to clarify the reason and changes of the commit. To learn more about gitmoji, visit https://gitmoji.dev | We're using the gitmoji to clarify the reason and changes of the commit. To learn more about gitmoji, visit <https://gitmoji.dev> | ||||||
|  |  | ||||||
| All the commit message should follow `:[gitmoji]: <commit message>` syntax | All the commit message should follow `:[gitmoji]: <commit message>` syntax | ||||||
|  |  | ||||||
| ## Translations & Localization | ## Translations & Localization | ||||||
|  |  | ||||||
| We're not accepting translation and localization improvements, or fixes on the GitHub or Solsynth Git Repository. If you want to contribute to those, please head to our Crowdin project: https://crowdin.com/project/solian | We're not accepting translation and localization improvements, or fixes on the GitHub or Solsynth Git Repository. If you want to contribute to those, please head to our Crowdin project: <https://crowdin.com/project/solian> | ||||||
|  |  | ||||||
| ## New Features | ## New Features | ||||||
|  |  | ||||||
| @@ -30,7 +30,12 @@ To contribute new features, please create an issue or mention the feature you wa | |||||||
|  |  | ||||||
| Read the error message, check for the update (including pre-releases), and wiki before creating an issue. At the same time, be respectful and don't argue with our developers and contributors in the development chat or GitHub issue. Otherwise your issue may got deleted and your Solar Network Account may got a strike. | Read the error message, check for the update (including pre-releases), and wiki before creating an issue. At the same time, be respectful and don't argue with our developers and contributors in the development chat or GitHub issue. Otherwise your issue may got deleted and your Solar Network Account may got a strike. | ||||||
|  |  | ||||||
|  | ## Styles of Code | ||||||
|  |  | ||||||
|  | Before you create a Pull Request, make sure your code has pass the `flutter analyze` check, if there is any notes, fix as much as possible, if there is no way to fix, do ignore. | ||||||
|  |  | ||||||
|  | When the code contains comments, use English. We do not any other language of comments existing in the codebase. It might confuse future contributors, cause the code hard to understand and maintaiance. | ||||||
|  |  | ||||||
| ----------- | ----------- | ||||||
|  |  | ||||||
| We appreciate every single commit you contributed. Let's work together and create a better Solar Network! | We appreciate every single commit you contributed. Let's work together and create a better Solar Network! | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @@ -8,6 +8,9 @@ | |||||||
|  |  | ||||||
| Hello there! Welcome to the main repository of the DysonNetwork (also known as the Solar Network). The code here is mainly about the front-end app (also known as Solian). But you can still post issues here to get help and request new features! | Hello there! Welcome to the main repository of the DysonNetwork (also known as the Solar Network). The code here is mainly about the front-end app (also known as Solian). But you can still post issues here to get help and request new features! | ||||||
|  |  | ||||||
|  | 如果你看得懂这行字,你可以前往我们的文档来了解更多: | ||||||
|  | [Suki - Solar Network](https://kb.solsynth.dev/zh/solar-network) | ||||||
|  |  | ||||||
| ## Server | ## Server | ||||||
|  |  | ||||||
| The backend of the Solar Network project is located at [Solsynth/DysonNetwork](https://github.com/Solsynth/DysonNetwork) | The backend of the Solar Network project is located at [Solsynth/DysonNetwork](https://github.com/Solsynth/DysonNetwork) | ||||||
| @@ -25,8 +28,6 @@ The content below will lead you to the world of Solar Network. | |||||||
|  |  | ||||||
| ### For Normal Users | ### For Normal Users | ||||||
|  |  | ||||||
| **The v3 Release is not ready, yet.** |  | ||||||
|  |  | ||||||
| 1. Go to the Github Releases page, and download the latest release / pre-release according to your platform. | 1. Go to the Github Releases page, and download the latest release / pre-release according to your platform. | ||||||
|    - **What's the difference between stable and pre-release?** The pre-release is untested by the other users and includes the new cutting-edge features, usually the pre-release is the feature drop. At the same time, due to we're not doing the API versioning, some breaking changes may break the stable release, so use the pre-release one instead. |    - **What's the difference between stable and pre-release?** The pre-release is untested by the other users and includes the new cutting-edge features, usually the pre-release is the feature drop. At the same time, due to we're not doing the API versioning, some breaking changes may break the stable release, so use the pre-release one instead. | ||||||
| 2. Create an account on the Solar Network | 2. Create an account on the Solar Network | ||||||
| @@ -62,3 +63,8 @@ If you want to build the release version, use the flutter build command. Learn m | |||||||
| flutter build <platform> | flutter build <platform> | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | ### Known Issues | ||||||
|  |  | ||||||
|  | Due to the issues with the flutter build tools, [see](https://github.com/flutter/flutter/issues/160622). | ||||||
|  |  | ||||||
|  | Since there is a watchOS app for iOS, you're unable to use the flutter cli to run iOS app. Use xcode instead. | ||||||
| @@ -5,6 +5,7 @@ plugins { | |||||||
|     id("com.android.application") |     id("com.android.application") | ||||||
|     // START: FlutterFire Configuration |     // START: FlutterFire Configuration | ||||||
|     id("com.google.gms.google-services") |     id("com.google.gms.google-services") | ||||||
|  |     id("com.google.firebase.crashlytics") | ||||||
|     // END: FlutterFire Configuration |     // END: FlutterFire Configuration | ||||||
|     id("kotlin-android") |     id("kotlin-android") | ||||||
|     // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. |     // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. | ||||||
| @@ -23,6 +24,8 @@ android { | |||||||
|     ndkVersion = "29.0.13113456" |     ndkVersion = "29.0.13113456" | ||||||
|  |  | ||||||
|     compileOptions { |     compileOptions { | ||||||
|  |         isCoreLibraryDesugaringEnabled = true | ||||||
|  |  | ||||||
|         sourceCompatibility = JavaVersion.VERSION_17 |         sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|         targetCompatibility = JavaVersion.VERSION_17 |         targetCompatibility = JavaVersion.VERSION_17 | ||||||
|     } |     } | ||||||
| @@ -51,17 +54,25 @@ android { | |||||||
|     buildTypes { |     buildTypes { | ||||||
|         release { |         release { | ||||||
|             signingConfig = signingConfigs.getByName("release") |             signingConfig = signingConfigs.getByName("release") | ||||||
|  |  | ||||||
|  |             isMinifyEnabled = true | ||||||
|  |             proguardFiles( | ||||||
|  |                 getDefaultProguardFile("proguard-android-optimize.txt"), | ||||||
|  |                 "proguard-rules.pro" | ||||||
|  |             ) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|  |     coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4") | ||||||
|  |      | ||||||
|     implementation("com.google.android.material:material:1.12.0") |     implementation("com.google.android.material:material:1.12.0") | ||||||
|     implementation("com.github.bumptech.glide:glide:4.16.0") |     implementation("com.github.bumptech.glide:glide:4.16.0") | ||||||
|     implementation("com.squareup.okhttp3:okhttp:4.12.0") |     implementation("com.squareup.okhttp3:okhttp:5.1.0") | ||||||
|     implementation("com.google.firebase:firebase-messaging-ktx") |  | ||||||
| } | } | ||||||
|  |  | ||||||
| flutter { | flutter { | ||||||
|     source = "../.." |     source = "../.." | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,7 +12,12 @@ | |||||||
|           "package_name": "dev.solsynth.solian" |           "package_name": "dev.solsynth.solian" | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       "oauth_client": [], |       "oauth_client": [ | ||||||
|  |         { | ||||||
|  |           "client_id": "961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com", | ||||||
|  |           "client_type": 3 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|       "api_key": [ |       "api_key": [ | ||||||
|         { |         { | ||||||
|           "current_key": "AIzaSyDvFNudXYs29uDtcCv6pFR8h5tXBs90FYk" |           "current_key": "AIzaSyDvFNudXYs29uDtcCv6pFR8h5tXBs90FYk" | ||||||
| @@ -20,7 +25,20 @@ | |||||||
|       ], |       ], | ||||||
|       "services": { |       "services": { | ||||||
|         "appinvite_service": { |         "appinvite_service": { | ||||||
|           "other_platform_oauth_client": [] |           "other_platform_oauth_client": [ | ||||||
|  |             { | ||||||
|  |               "client_id": "961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com", | ||||||
|  |               "client_type": 3 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "client_id": "961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com", | ||||||
|  |               "client_type": 2, | ||||||
|  |               "ios_info": { | ||||||
|  |                 "bundle_id": "dev.solsynth.solian", | ||||||
|  |                 "app_store_id": "6499032345" | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								android/app/proguard-rules.pro
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,5 @@ | |||||||
|  | # JNI Zero initialization (required for WebRTC native method registration) | ||||||
|  | -keep class livekit.org.jni_zero.JniInit { | ||||||
|  |     # Keep the init method un-obfuscated for native code callback | ||||||
|  |     private static java.lang.Object[] init(); | ||||||
|  | } | ||||||
| @@ -4,6 +4,7 @@ | |||||||
|     <uses-permission android:name="android.permission.INTERNET" /> |     <uses-permission android:name="android.permission.INTERNET" /> | ||||||
|     <uses-permission android:name="android.permission.CAMERA" /> |     <uses-permission android:name="android.permission.CAMERA" /> | ||||||
|     <uses-permission android:name="android.permission.RECORD_AUDIO" /> |     <uses-permission android:name="android.permission.RECORD_AUDIO" /> | ||||||
|  |     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> | ||||||
|     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> | ||||||
|     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> |     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> | ||||||
|     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> |     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> | ||||||
| @@ -42,6 +43,21 @@ | |||||||
|                 <category android:name="android.intent.category.LAUNCHER" /> |                 <category android:name="android.intent.category.LAUNCHER" /> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|  |  | ||||||
|  |             <!-- Deeplinking --> | ||||||
|  |             <intent-filter android:autoVerify="true"> | ||||||
|  |                 <action android:name="android.intent.action.VIEW" /> | ||||||
|  |                 <category android:name="android.intent.category.DEFAULT" /> | ||||||
|  |                 <category android:name="android.intent.category.BROWSABLE" /> | ||||||
|  |                 <data android:scheme="http" android:host="solian.app" /> | ||||||
|  |                 <data android:scheme="https" /> | ||||||
|  |             </intent-filter> | ||||||
|  |             <intent-filter android:autoVerify="true"> | ||||||
|  |                 <action android:name="android.intent.action.VIEW" /> | ||||||
|  |                 <category android:name="android.intent.category.DEFAULT" /> | ||||||
|  |                 <category android:name="android.intent.category.BROWSABLE" /> | ||||||
|  |                 <data android:scheme="solian" /> | ||||||
|  |             </intent-filter> | ||||||
|  |  | ||||||
|             <!-- Share Intent Filters --> |             <!-- Share Intent Filters --> | ||||||
|             <intent-filter> |             <intent-filter> | ||||||
|                 <action android:name="android.intent.action.SEND" /> |                 <action android:name="android.intent.action.SEND" /> | ||||||
| @@ -80,6 +96,13 @@ | |||||||
|             </intent-filter> |             </intent-filter> | ||||||
|         </activity> |         </activity> | ||||||
|  |  | ||||||
|  |         <!-- Livekit Screenshare --> | ||||||
|  |         <service | ||||||
|  |             android:name="de.julianassmann.flutter_background.IsolateHolderService" | ||||||
|  |             android:enabled="true" | ||||||
|  |             android:exported="false" | ||||||
|  |             android:foregroundServiceType="mediaProjection" /> | ||||||
|  |  | ||||||
|         <!-- Sign in with Apple --> |         <!-- Sign in with Apple --> | ||||||
|         <activity |         <activity | ||||||
|             android:name="com.aboutyou.dart_packages.sign_in_with_apple.SignInWithAppleCallback" |             android:name="com.aboutyou.dart_packages.sign_in_with_apple.SignInWithAppleCallback" | ||||||
| @@ -100,14 +123,6 @@ | |||||||
|             android:enabled="true" |             android:enabled="true" | ||||||
|             android:exported="true" /> |             android:exported="true" /> | ||||||
|  |  | ||||||
|         <service |  | ||||||
|             android:name=".service.MessagingService" |  | ||||||
|             android:exported="false"> |  | ||||||
|             <intent-filter> |  | ||||||
|                 <action android:name="com.google.firebase.MESSAGING_EVENT" /> |  | ||||||
|             </intent-filter> |  | ||||||
|         </service> |  | ||||||
|  |  | ||||||
|         <provider |         <provider | ||||||
|             android:name="androidx.core.content.FileProvider" |             android:name="androidx.core.content.FileProvider" | ||||||
|             android:authorities="dev.solsynth.solian.provider" |             android:authorities="dev.solsynth.solian.provider" | ||||||
|   | |||||||
| @@ -1,102 +0,0 @@ | |||||||
| package dev.solsynth.solian.service |  | ||||||
|  |  | ||||||
| import android.app.PendingIntent |  | ||||||
| import android.content.Intent |  | ||||||
| import android.graphics.Bitmap |  | ||||||
| import android.graphics.drawable.Drawable |  | ||||||
| import android.os.Build |  | ||||||
| import androidx.core.app.NotificationCompat |  | ||||||
| import androidx.core.app.NotificationManagerCompat |  | ||||||
| import androidx.core.app.RemoteInput |  | ||||||
| import com.bumptech.glide.Glide |  | ||||||
| import com.bumptech.glide.request.target.CustomTarget |  | ||||||
| import com.bumptech.glide.request.transition.Transition |  | ||||||
| import com.google.firebase.messaging.FirebaseMessagingService |  | ||||||
| import com.google.firebase.messaging.RemoteMessage |  | ||||||
| import dev.solsynth.solian.MainActivity |  | ||||||
| import dev.solsynth.solian.receiver.ReplyReceiver |  | ||||||
| import org.json.JSONObject |  | ||||||
|  |  | ||||||
| class MessagingService: FirebaseMessagingService() { |  | ||||||
|     override fun onMessageReceived(remoteMessage: RemoteMessage) { |  | ||||||
|         val type = remoteMessage.data["type"] |  | ||||||
|         if (type == "messages.new") { |  | ||||||
|             handleMessageNotification(remoteMessage) |  | ||||||
|         } else { |  | ||||||
|             // Handle other notification types |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private fun handleMessageNotification(remoteMessage: RemoteMessage) { |  | ||||||
|         val data = remoteMessage.data |  | ||||||
|         val metaString = data["meta"] ?: return |  | ||||||
|         val meta = JSONObject(metaString) |  | ||||||
|  |  | ||||||
|         val pfp = meta.optString("pfp", null) |  | ||||||
|         val roomId = meta.optString("room_id", null) |  | ||||||
|         val messageId = meta.optString("message_id", null) |  | ||||||
|  |  | ||||||
|         val notificationId = System.currentTimeMillis().toInt() |  | ||||||
|  |  | ||||||
|         val replyLabel = "Reply" |  | ||||||
|         val remoteInput = RemoteInput.Builder("key_text_reply") |  | ||||||
|             .setLabel(replyLabel) |  | ||||||
|             .build() |  | ||||||
|  |  | ||||||
|         val replyIntent = Intent(this, ReplyReceiver::class.java).apply { |  | ||||||
|             putExtra("room_id", roomId) |  | ||||||
|             putExtra("message_id", messageId) |  | ||||||
|             putExtra("notification_id", notificationId) |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         val pendingIntentFlags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { |  | ||||||
|             PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE |  | ||||||
|         } else { |  | ||||||
|             PendingIntent.FLAG_UPDATE_CURRENT |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         val replyPendingIntent = PendingIntent.getBroadcast( |  | ||||||
|             applicationContext, |  | ||||||
|             notificationId, |  | ||||||
|             replyIntent, |  | ||||||
|             pendingIntentFlags |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         val action = NotificationCompat.Action.Builder( |  | ||||||
|             android.R.drawable.ic_menu_send, |  | ||||||
|             replyLabel, |  | ||||||
|             replyPendingIntent |  | ||||||
|         ) |  | ||||||
|             .addRemoteInput(remoteInput) |  | ||||||
|             .build() |  | ||||||
|  |  | ||||||
|         val intent = Intent(this, MainActivity::class.java) |  | ||||||
|         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) |  | ||||||
|         intent.putExtra("room_id", roomId) |  | ||||||
|         val pendingIntent = PendingIntent.getActivity(this, 0, intent, pendingIntentFlags) |  | ||||||
|  |  | ||||||
|         val notificationBuilder = NotificationCompat.Builder(this, "messages") |  | ||||||
|             .setSmallIcon(android.R.drawable.ic_dialog_info) |  | ||||||
|             .setContentTitle(remoteMessage.notification?.title) |  | ||||||
|             .setContentText(remoteMessage.notification?.body) |  | ||||||
|             .setPriority(NotificationCompat.PRIORITY_HIGH) |  | ||||||
|             .setContentIntent(pendingIntent) |  | ||||||
|             .addAction(action) |  | ||||||
|  |  | ||||||
|         if (pfp != null) { |  | ||||||
|             Glide.with(applicationContext) |  | ||||||
|                 .asBitmap() |  | ||||||
|                 .load(pfp) |  | ||||||
|                 .into(object : CustomTarget<Bitmap>() { |  | ||||||
|                     override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) { |  | ||||||
|                         notificationBuilder.setLargeIcon(resource) |  | ||||||
|                         NotificationManagerCompat.from(applicationContext).notify(notificationId, notificationBuilder.build()) |  | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     override fun onLoadCleared(placeholder: Drawable?) {} |  | ||||||
|                 }) |  | ||||||
|         } else { |  | ||||||
|             NotificationManagerCompat.from(this).notify(notificationId, notificationBuilder.build()) |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										41
									
								
								android/app/src/main/res/drawable/ic_notification.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,41 @@ | |||||||
|  | <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:width="192dp" | ||||||
|  |     android:height="192dp" | ||||||
|  |     android:viewportWidth="192" | ||||||
|  |     android:viewportHeight="192"> | ||||||
|  |   <path | ||||||
|  |       android:pathData="M54,147h86" | ||||||
|  |       android:strokeLineJoin="round" | ||||||
|  |       android:strokeWidth="12" | ||||||
|  |       android:fillColor="#00000000" | ||||||
|  |       android:strokeColor="#000" | ||||||
|  |       android:strokeLineCap="round"/> | ||||||
|  |   <path | ||||||
|  |       android:pathData="M57,111s-2,-4.5 -2,-10m22,22s-4,7 -11,4m9,-22s-2,-4.5 -2,-10" | ||||||
|  |       android:strokeLineJoin="round" | ||||||
|  |       android:strokeWidth="10" | ||||||
|  |       android:fillColor="#00000000" | ||||||
|  |       android:strokeColor="#000" | ||||||
|  |       android:strokeLineCap="round"/> | ||||||
|  |   <path | ||||||
|  |       android:pathData="M54,147a32,32 0,0 1,-12 -61.67A39,39 0,0 1,81 46m59,101a30,30 0,0 0,29.93 -28" | ||||||
|  |       android:strokeLineJoin="round" | ||||||
|  |       android:strokeWidth="12" | ||||||
|  |       android:fillColor="#00000000" | ||||||
|  |       android:strokeColor="#000" | ||||||
|  |       android:strokeLineCap="round"/> | ||||||
|  |   <path | ||||||
|  |       android:pathData="M132,75m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0" | ||||||
|  |       android:strokeLineJoin="round" | ||||||
|  |       android:strokeWidth="8" | ||||||
|  |       android:fillColor="#00000000" | ||||||
|  |       android:strokeColor="#000" | ||||||
|  |       android:strokeLineCap="round"/> | ||||||
|  |   <path | ||||||
|  |       android:pathData="M112.5,41.22C100.84,47.96 93,60.56 93,75c0,6.38 1.53,12.39 4.24,17.71m69.51,-35.42A38.84,38.84 0,0 1,171 75c0,14.43 -7.84,27.03 -19.49,33.78m-0.79,-43.32A20.9,20.9 0,0 1,153 75c0,7.77 -4.22,14.56 -10.49,18.19m-21,-36.38C115.22,60.44 111,67.23 111,75a20.9,20.9 0,0 0,2.28 9.53" | ||||||
|  |       android:strokeLineJoin="round" | ||||||
|  |       android:strokeWidth="10" | ||||||
|  |       android:fillColor="#00000000" | ||||||
|  |       android:strokeColor="#000" | ||||||
|  |       android:strokeLineCap="round"/> | ||||||
|  | </vector> | ||||||
| @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME | |||||||
| distributionPath=wrapper/dists | distributionPath=wrapper/dists | ||||||
| zipStoreBase=GRADLE_USER_HOME | zipStoreBase=GRADLE_USER_HOME | ||||||
| zipStorePath=wrapper/dists | zipStorePath=wrapper/dists | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip | ||||||
|   | |||||||
| @@ -18,11 +18,12 @@ pluginManagement { | |||||||
|  |  | ||||||
| plugins { | plugins { | ||||||
|     id("dev.flutter.flutter-plugin-loader") version "1.0.0" |     id("dev.flutter.flutter-plugin-loader") version "1.0.0" | ||||||
|     id("com.android.application") version "8.10.1" apply false |     id("com.android.application") version "8.12.0" apply false | ||||||
|     // START: FlutterFire Configuration |     // START: FlutterFire Configuration | ||||||
|     id("com.google.gms.google-services") version("4.3.15") apply false |     id("com.google.gms.google-services") version("4.3.15") apply false | ||||||
|  |     id("com.google.firebase.crashlytics") version("2.8.1") apply false | ||||||
|     // END: FlutterFire Configuration |     // END: FlutterFire Configuration | ||||||
|     id("org.jetbrains.kotlin.android") version "1.8.22" apply false |     id("org.jetbrains.kotlin.android") version("2.2.0") apply false | ||||||
| } | } | ||||||
|  |  | ||||||
| include(":app") | include(":app") | ||||||
|   | |||||||
							
								
								
									
										1079
									
								
								assets/i18n/es-ES.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1079
									
								
								assets/i18n/ja-JP.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1079
									
								
								assets/i18n/ko-KR.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1079
									
								
								assets/i18n/zh-OG.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										12
									
								
								assets/icons/icon-outline.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" width="192" height="192" fill="none"> | ||||||
|  |     <path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="12" | ||||||
|  |         d="M54 147h86" /> | ||||||
|  |     <path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="10" | ||||||
|  |         d="M57 111s-2-4.5-2-10m22 22s-4 7-11 4m9-22s-2-4.5-2-10" /> | ||||||
|  |     <path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="12" | ||||||
|  |         d="M54 147a32 32 0 0 1-11.999-61.665A39 39 0 0 1 81 46m59 101a30 30 0 0 0 29.933-28" /> | ||||||
|  |     <circle cx="132" cy="75" r="4" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" | ||||||
|  |         stroke-width="8" /> | ||||||
|  |     <path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="10" | ||||||
|  |         d="M112.5 41.217C100.843 47.961 93 60.564 93 75c0 6.375 1.53 12.393 4.242 17.707m69.513-35.419A38.84 38.84 0 0 1 171 75c0 14.433-7.84 27.034-19.493 33.779m-.793-43.317A20.9 20.9 0 0 1 153 75c0 7.77-4.221 14.556-10.495 18.188m-21.003-36.38C115.224 60.44 111 67.226 111 75a20.9 20.9 0 0 0 2.284 9.533" /> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 1.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/icons/icon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 108 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/images/media-offline.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 461 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/images/stickers/angry.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.0 MiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/images/stickers/clap.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.0 MiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/images/stickers/confuse.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 668 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/images/stickers/party.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.1 MiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/images/stickers/pray.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 666 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/images/stickers/thumb_up.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 623 KiB | 
| @@ -5,3 +5,7 @@ targets: | |||||||
|         options: |         options: | ||||||
|           explicit_to_json: true |           explicit_to_json: true | ||||||
|           field_rename: snake |           field_rename: snake | ||||||
|  |       drift_dev: | ||||||
|  |         options: | ||||||
|  |           databases: | ||||||
|  |             app_database: lib/database/drift_db.dart | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								drift_schemas/app_database/drift_schema_v6.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -1 +1 @@ | |||||||
| {"flutter":{"platforms":{"android":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:android:a8d3f7995b0b8e86f4188b","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:ios:727229d368cc47e1f4188b","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:ios:727229d368cc47e1f4188b","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"solian-0x001","configurations":{"android":"1:961776991058:android:a8d3f7995b0b8e86f4188b","ios":"1:961776991058:ios:727229d368cc47e1f4188b","macos":"1:961776991058:ios:727229d368cc47e1f4188b","web":"1:961776991058:web:b91d12f2892a5609f4188b","windows":"1:961776991058:web:3a912c0eb14028e5f4188b"}}}}}} | {"flutter":{"platforms":{"android":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:android:a8d3f7995b0b8e86f4188b","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:ios:727229d368cc47e1f4188b","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:ios:727229d368cc47e1f4188b","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"solian-0x001","configurations":{"android":"1:961776991058:android:a8d3f7995b0b8e86f4188b","ios":"1:961776991058:ios:727229d368cc47e1f4188b","macos":"1:961776991058:ios:727229d368cc47e1f4188b","web":"1:961776991058:web:3a912c0eb14028e5f4188b","windows":"1:961776991058:web:3a912c0eb14028e5f4188b"}}}}}} | ||||||
| @@ -21,6 +21,6 @@ | |||||||
|   <key>CFBundleVersion</key> |   <key>CFBundleVersion</key> | ||||||
|   <string>1.0</string> |   <string>1.0</string> | ||||||
|   <key>MinimumOSVersion</key> |   <key>MinimumOSVersion</key> | ||||||
|   <string>12.0</string> |   <string>13.0</string> | ||||||
| </dict> | </dict> | ||||||
| </plist> | </plist> | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								ios/Podfile
									
									
									
									
									
								
							
							
						
						| @@ -1,5 +1,4 @@ | |||||||
| # Uncomment this line to define a global platform for your project | platform :ios, '15.0' | ||||||
| platform :ios, '13.0' |  | ||||||
|  |  | ||||||
| # CocoaPods analytics sends network stats synchronously affecting flutter build latency. | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. | ||||||
| ENV['COCOAPODS_DISABLE_STATS'] = 'true' | ENV['COCOAPODS_DISABLE_STATS'] = 'true' | ||||||
| @@ -32,6 +31,8 @@ target 'Runner' do | |||||||
|   use_modular_headers! |   use_modular_headers! | ||||||
|  |  | ||||||
|   pod 'Alamofire' |   pod 'Alamofire' | ||||||
|  |   pod 'Kingfisher', '~> 8.0' | ||||||
|  |   pod 'KingfisherWebP' | ||||||
|  |  | ||||||
|   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) |   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) | ||||||
|  |  | ||||||
| @@ -41,8 +42,6 @@ target 'Runner' do | |||||||
|  |  | ||||||
|   target 'SolianNotificationService' do |   target 'SolianNotificationService' do | ||||||
|     inherit! :search_paths |     inherit! :search_paths | ||||||
|     pod 'Kingfisher', '~> 8.0' |  | ||||||
|     pod 'Alamofire' |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   target 'SolianShareExtension' do |   target 'SolianShareExtension' do | ||||||
| @@ -50,6 +49,16 @@ target 'Runner' do | |||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | target 'WatchRunner Watch App' do | ||||||
|  |   platform :watchos, '11.0' | ||||||
|  |  | ||||||
|  |   use_frameworks! | ||||||
|  |   use_modular_headers! | ||||||
|  |  | ||||||
|  |   pod 'Kingfisher', '~> 8.0' | ||||||
|  |   pod 'KingfisherWebP' | ||||||
|  | end | ||||||
|  |  | ||||||
| post_install do |installer| | post_install do |installer| | ||||||
|   installer.pods_project.targets.each do |target| |   installer.pods_project.targets.each do |target| | ||||||
|     flutter_additional_ios_build_settings(target) |     flutter_additional_ios_build_settings(target) | ||||||
|   | |||||||
							
								
								
									
										289
									
								
								ios/Podfile.lock
									
									
									
									
									
								
							
							
						
						| @@ -1,5 +1,7 @@ | |||||||
| PODS: | PODS: | ||||||
|   - Alamofire (5.10.2) |   - Alamofire (5.10.2) | ||||||
|  |   - app_links (6.4.1): | ||||||
|  |     - Flutter | ||||||
|   - connectivity_plus (0.0.1): |   - connectivity_plus (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - croppy (0.0.1): |   - croppy (0.0.1): | ||||||
| @@ -40,39 +42,93 @@ PODS: | |||||||
|   - file_picker (0.0.1): |   - file_picker (0.0.1): | ||||||
|     - DKImagePickerController/PhotoGallery |     - DKImagePickerController/PhotoGallery | ||||||
|     - Flutter |     - Flutter | ||||||
|   - Firebase/CoreOnly (11.13.0): |   - file_saver (0.0.1): | ||||||
|     - FirebaseCore (~> 11.13.0) |  | ||||||
|   - Firebase/Messaging (11.13.0): |  | ||||||
|     - Firebase/CoreOnly |  | ||||||
|     - FirebaseMessaging (~> 11.13.0) |  | ||||||
|   - firebase_core (3.14.0): |  | ||||||
|     - Firebase/CoreOnly (= 11.13.0) |  | ||||||
|     - Flutter |     - Flutter | ||||||
|   - firebase_messaging (15.2.7): |   - Firebase/CoreOnly (12.4.0): | ||||||
|     - Firebase/Messaging (= 11.13.0) |     - FirebaseCore (~> 12.4.0) | ||||||
|  |   - Firebase/Crashlytics (12.4.0): | ||||||
|  |     - Firebase/CoreOnly | ||||||
|  |     - FirebaseCrashlytics (~> 12.4.0) | ||||||
|  |   - Firebase/Messaging (12.4.0): | ||||||
|  |     - Firebase/CoreOnly | ||||||
|  |     - FirebaseMessaging (~> 12.4.0) | ||||||
|  |   - firebase_analytics (12.0.3): | ||||||
|  |     - firebase_core | ||||||
|  |     - FirebaseAnalytics (= 12.4.0) | ||||||
|  |     - Flutter | ||||||
|  |   - firebase_core (4.2.0): | ||||||
|  |     - Firebase/CoreOnly (= 12.4.0) | ||||||
|  |     - Flutter | ||||||
|  |   - firebase_crashlytics (5.0.3): | ||||||
|  |     - Firebase/Crashlytics (= 12.4.0) | ||||||
|     - firebase_core |     - firebase_core | ||||||
|     - Flutter |     - Flutter | ||||||
|   - FirebaseCore (11.13.0): |   - firebase_messaging (16.0.3): | ||||||
|     - FirebaseCoreInternal (~> 11.13.0) |     - Firebase/Messaging (= 12.4.0) | ||||||
|  |     - firebase_core | ||||||
|  |     - Flutter | ||||||
|  |   - FirebaseAnalytics (12.4.0): | ||||||
|  |     - FirebaseAnalytics/Default (= 12.4.0) | ||||||
|  |     - FirebaseCore (~> 12.4.0) | ||||||
|  |     - FirebaseInstallations (~> 12.4.0) | ||||||
|  |     - GoogleUtilities/AppDelegateSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/MethodSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/Network (~> 8.1) | ||||||
|  |     - "GoogleUtilities/NSData+zlib (~> 8.1)" | ||||||
|  |     - nanopb (~> 3.30910.0) | ||||||
|  |   - FirebaseAnalytics/Default (12.4.0): | ||||||
|  |     - FirebaseCore (~> 12.4.0) | ||||||
|  |     - FirebaseInstallations (~> 12.4.0) | ||||||
|  |     - GoogleAppMeasurement/Default (= 12.4.0) | ||||||
|  |     - GoogleUtilities/AppDelegateSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/MethodSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/Network (~> 8.1) | ||||||
|  |     - "GoogleUtilities/NSData+zlib (~> 8.1)" | ||||||
|  |     - nanopb (~> 3.30910.0) | ||||||
|  |   - FirebaseCore (12.4.0): | ||||||
|  |     - FirebaseCoreInternal (~> 12.4.0) | ||||||
|     - GoogleUtilities/Environment (~> 8.1) |     - GoogleUtilities/Environment (~> 8.1) | ||||||
|     - GoogleUtilities/Logger (~> 8.1) |     - GoogleUtilities/Logger (~> 8.1) | ||||||
|   - FirebaseCoreInternal (11.13.0): |   - FirebaseCoreExtension (12.4.0): | ||||||
|  |     - FirebaseCore (~> 12.4.0) | ||||||
|  |   - FirebaseCoreInternal (12.4.0): | ||||||
|     - "GoogleUtilities/NSData+zlib (~> 8.1)" |     - "GoogleUtilities/NSData+zlib (~> 8.1)" | ||||||
|   - FirebaseInstallations (11.13.0): |   - FirebaseCrashlytics (12.4.0): | ||||||
|     - FirebaseCore (~> 11.13.0) |     - FirebaseCore (~> 12.4.0) | ||||||
|  |     - FirebaseInstallations (~> 12.4.0) | ||||||
|  |     - FirebaseRemoteConfigInterop (~> 12.4.0) | ||||||
|  |     - FirebaseSessions (~> 12.4.0) | ||||||
|  |     - GoogleDataTransport (~> 10.1) | ||||||
|  |     - GoogleUtilities/Environment (~> 8.1) | ||||||
|  |     - nanopb (~> 3.30910.0) | ||||||
|  |     - PromisesObjC (~> 2.4) | ||||||
|  |   - FirebaseInstallations (12.4.0): | ||||||
|  |     - FirebaseCore (~> 12.4.0) | ||||||
|     - GoogleUtilities/Environment (~> 8.1) |     - GoogleUtilities/Environment (~> 8.1) | ||||||
|     - GoogleUtilities/UserDefaults (~> 8.1) |     - GoogleUtilities/UserDefaults (~> 8.1) | ||||||
|     - PromisesObjC (~> 2.4) |     - PromisesObjC (~> 2.4) | ||||||
|   - FirebaseMessaging (11.13.0): |   - FirebaseMessaging (12.4.0): | ||||||
|     - FirebaseCore (~> 11.13.0) |     - FirebaseCore (~> 12.4.0) | ||||||
|     - FirebaseInstallations (~> 11.0) |     - FirebaseInstallations (~> 12.4.0) | ||||||
|     - GoogleDataTransport (~> 10.0) |     - GoogleDataTransport (~> 10.1) | ||||||
|     - GoogleUtilities/AppDelegateSwizzler (~> 8.1) |     - GoogleUtilities/AppDelegateSwizzler (~> 8.1) | ||||||
|     - GoogleUtilities/Environment (~> 8.1) |     - GoogleUtilities/Environment (~> 8.1) | ||||||
|     - GoogleUtilities/Reachability (~> 8.1) |     - GoogleUtilities/Reachability (~> 8.1) | ||||||
|     - GoogleUtilities/UserDefaults (~> 8.1) |     - GoogleUtilities/UserDefaults (~> 8.1) | ||||||
|     - nanopb (~> 3.30910.0) |     - nanopb (~> 3.30910.0) | ||||||
|  |   - FirebaseRemoteConfigInterop (12.4.0) | ||||||
|  |   - FirebaseSessions (12.4.0): | ||||||
|  |     - FirebaseCore (~> 12.4.0) | ||||||
|  |     - FirebaseCoreExtension (~> 12.4.0) | ||||||
|  |     - FirebaseInstallations (~> 12.4.0) | ||||||
|  |     - GoogleDataTransport (~> 10.1) | ||||||
|  |     - GoogleUtilities/Environment (~> 8.1) | ||||||
|  |     - GoogleUtilities/UserDefaults (~> 8.1) | ||||||
|  |     - nanopb (~> 3.30910.0) | ||||||
|  |     - PromisesSwift (~> 2.1) | ||||||
|   - Flutter (1.0.0) |   - Flutter (1.0.0) | ||||||
|  |   - flutter_app_update (0.0.1): | ||||||
|  |     - Flutter | ||||||
|   - flutter_inappwebview_ios (0.0.1): |   - flutter_inappwebview_ios (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - flutter_inappwebview_ios/Core (= 0.0.1) |     - flutter_inappwebview_ios/Core (= 0.0.1) | ||||||
| @@ -80,6 +136,10 @@ PODS: | |||||||
|   - flutter_inappwebview_ios/Core (0.0.1): |   - flutter_inappwebview_ios/Core (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - OrderedSet (~> 6.0.3) |     - OrderedSet (~> 6.0.3) | ||||||
|  |   - flutter_keyboard_visibility (0.0.1): | ||||||
|  |     - Flutter | ||||||
|  |   - flutter_local_notifications (0.0.1): | ||||||
|  |     - Flutter | ||||||
|   - flutter_native_splash (2.4.3): |   - flutter_native_splash (2.4.3): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - flutter_platform_alert (0.0.1): |   - flutter_platform_alert (0.0.1): | ||||||
| @@ -91,12 +151,39 @@ PODS: | |||||||
|   - flutter_udid (0.0.1): |   - flutter_udid (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - SAMKeychain |     - SAMKeychain | ||||||
|   - flutter_webrtc (0.14.0): |   - flutter_webrtc (1.2.0): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - WebRTC-SDK (= 125.6422.07) |     - WebRTC-SDK (= 137.7151.04) | ||||||
|   - gal (1.0.0): |   - gal (1.0.0): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - FlutterMacOS |     - FlutterMacOS | ||||||
|  |   - GoogleAdsOnDeviceConversion (3.1.0): | ||||||
|  |     - GoogleUtilities/Environment (~> 8.1) | ||||||
|  |     - GoogleUtilities/Logger (~> 8.1) | ||||||
|  |     - GoogleUtilities/Network (~> 8.1) | ||||||
|  |     - nanopb (~> 3.30910.0) | ||||||
|  |   - GoogleAppMeasurement/Core (12.4.0): | ||||||
|  |     - GoogleUtilities/AppDelegateSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/MethodSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/Network (~> 8.1) | ||||||
|  |     - "GoogleUtilities/NSData+zlib (~> 8.1)" | ||||||
|  |     - nanopb (~> 3.30910.0) | ||||||
|  |   - GoogleAppMeasurement/Default (12.4.0): | ||||||
|  |     - GoogleAdsOnDeviceConversion (~> 3.1.0) | ||||||
|  |     - GoogleAppMeasurement/Core (= 12.4.0) | ||||||
|  |     - GoogleAppMeasurement/IdentitySupport (= 12.4.0) | ||||||
|  |     - GoogleUtilities/AppDelegateSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/MethodSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/Network (~> 8.1) | ||||||
|  |     - "GoogleUtilities/NSData+zlib (~> 8.1)" | ||||||
|  |     - nanopb (~> 3.30910.0) | ||||||
|  |   - GoogleAppMeasurement/IdentitySupport (12.4.0): | ||||||
|  |     - GoogleAppMeasurement/Core (= 12.4.0) | ||||||
|  |     - GoogleUtilities/AppDelegateSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/MethodSwizzler (~> 8.1) | ||||||
|  |     - GoogleUtilities/Network (~> 8.1) | ||||||
|  |     - "GoogleUtilities/NSData+zlib (~> 8.1)" | ||||||
|  |     - nanopb (~> 3.30910.0) | ||||||
|   - GoogleDataTransport (10.1.0): |   - GoogleDataTransport (10.1.0): | ||||||
|     - nanopb (~> 3.30910.0) |     - nanopb (~> 3.30910.0) | ||||||
|     - PromisesObjC (~> 2.4) |     - PromisesObjC (~> 2.4) | ||||||
| @@ -110,6 +197,9 @@ PODS: | |||||||
|   - GoogleUtilities/Logger (8.1.0): |   - GoogleUtilities/Logger (8.1.0): | ||||||
|     - GoogleUtilities/Environment |     - GoogleUtilities/Environment | ||||||
|     - GoogleUtilities/Privacy |     - GoogleUtilities/Privacy | ||||||
|  |   - GoogleUtilities/MethodSwizzler (8.1.0): | ||||||
|  |     - GoogleUtilities/Logger | ||||||
|  |     - GoogleUtilities/Privacy | ||||||
|   - GoogleUtilities/Network (8.1.0): |   - GoogleUtilities/Network (8.1.0): | ||||||
|     - GoogleUtilities/Logger |     - GoogleUtilities/Logger | ||||||
|     - "GoogleUtilities/NSData+zlib" |     - "GoogleUtilities/NSData+zlib" | ||||||
| @@ -128,11 +218,26 @@ PODS: | |||||||
|     - Flutter |     - Flutter | ||||||
|   - irondash_engine_context (0.0.1): |   - irondash_engine_context (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - Kingfisher (8.3.2) |   - Kingfisher (8.6.1) | ||||||
|   - livekit_client (2.4.8): |   - KingfisherWebP (1.7.2): | ||||||
|  |     - Kingfisher (~> 8.0) | ||||||
|  |     - libwebp (>= 1.1.0) | ||||||
|  |   - libwebp (1.5.0): | ||||||
|  |     - libwebp/demux (= 1.5.0) | ||||||
|  |     - libwebp/mux (= 1.5.0) | ||||||
|  |     - libwebp/sharpyuv (= 1.5.0) | ||||||
|  |     - libwebp/webp (= 1.5.0) | ||||||
|  |   - libwebp/demux (1.5.0): | ||||||
|  |     - libwebp/webp | ||||||
|  |   - libwebp/mux (1.5.0): | ||||||
|  |     - libwebp/demux | ||||||
|  |   - libwebp/sharpyuv (1.5.0) | ||||||
|  |   - libwebp/webp (1.5.0): | ||||||
|  |     - libwebp/sharpyuv | ||||||
|  |   - livekit_client (2.5.3): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - flutter_webrtc |     - flutter_webrtc | ||||||
|     - WebRTC-SDK (= 125.6422.07) |     - WebRTC-SDK (= 137.7151.04) | ||||||
|   - local_auth_darwin (0.0.1): |   - local_auth_darwin (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - FlutterMacOS |     - FlutterMacOS | ||||||
| @@ -155,15 +260,19 @@ PODS: | |||||||
|   - path_provider_foundation (0.0.1): |   - path_provider_foundation (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - FlutterMacOS |     - FlutterMacOS | ||||||
|  |   - pointer_interceptor_ios (0.0.1): | ||||||
|  |     - Flutter | ||||||
|   - PromisesObjC (2.4.0) |   - PromisesObjC (2.4.0) | ||||||
|  |   - PromisesSwift (2.4.0): | ||||||
|  |     - PromisesObjC (= 2.4.0) | ||||||
|   - receive_sharing_intent (1.8.1): |   - receive_sharing_intent (1.8.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - record_ios (1.0.0): |   - record_ios (1.1.0): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - SAMKeychain (1.5.3) |   - SAMKeychain (1.5.3) | ||||||
|   - SDWebImage (5.21.1): |   - SDWebImage (5.21.3): | ||||||
|     - SDWebImage/Core (= 5.21.1) |     - SDWebImage/Core (= 5.21.3) | ||||||
|   - SDWebImage/Core (5.21.1) |   - SDWebImage/Core (5.21.3) | ||||||
|   - share_plus (0.0.1): |   - share_plus (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - shared_preferences_foundation (0.0.1): |   - shared_preferences_foundation (0.0.1): | ||||||
| @@ -174,49 +283,61 @@ PODS: | |||||||
|   - sqflite_darwin (0.0.4): |   - sqflite_darwin (0.0.4): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - FlutterMacOS |     - FlutterMacOS | ||||||
|   - sqlite3 (3.50.1): |   - sqlite3 (3.50.4): | ||||||
|     - sqlite3/common (= 3.50.1) |     - sqlite3/common (= 3.50.4) | ||||||
|   - sqlite3/common (3.50.1) |   - sqlite3/common (3.50.4) | ||||||
|   - sqlite3/dbstatvtab (3.50.1): |   - sqlite3/dbstatvtab (3.50.4): | ||||||
|     - sqlite3/common |     - sqlite3/common | ||||||
|   - sqlite3/fts5 (3.50.1): |   - sqlite3/fts5 (3.50.4): | ||||||
|     - sqlite3/common |     - sqlite3/common | ||||||
|   - sqlite3/math (3.50.1): |   - sqlite3/math (3.50.4): | ||||||
|     - sqlite3/common |     - sqlite3/common | ||||||
|   - sqlite3/perf-threadsafe (3.50.1): |   - sqlite3/perf-threadsafe (3.50.4): | ||||||
|     - sqlite3/common |     - sqlite3/common | ||||||
|   - sqlite3/rtree (3.50.1): |   - sqlite3/rtree (3.50.4): | ||||||
|  |     - sqlite3/common | ||||||
|  |   - sqlite3/session (3.50.4): | ||||||
|     - sqlite3/common |     - sqlite3/common | ||||||
|   - sqlite3_flutter_libs (0.0.1): |   - sqlite3_flutter_libs (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - FlutterMacOS |     - FlutterMacOS | ||||||
|     - sqlite3 (~> 3.50.1) |     - sqlite3 (~> 3.50.4) | ||||||
|     - sqlite3/dbstatvtab |     - sqlite3/dbstatvtab | ||||||
|     - sqlite3/fts5 |     - sqlite3/fts5 | ||||||
|     - sqlite3/math |     - sqlite3/math | ||||||
|     - sqlite3/perf-threadsafe |     - sqlite3/perf-threadsafe | ||||||
|     - sqlite3/rtree |     - sqlite3/rtree | ||||||
|  |     - sqlite3/session | ||||||
|   - super_native_extensions (0.0.1): |   - super_native_extensions (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - SwiftyGif (5.4.5) |   - SwiftyGif (5.4.5) | ||||||
|  |   - syncfusion_flutter_pdfviewer (0.0.1): | ||||||
|  |     - Flutter | ||||||
|   - url_launcher_ios (0.0.1): |   - url_launcher_ios (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - volume_controller (0.0.1): |   - volume_controller (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - wakelock_plus (0.0.1): |   - wakelock_plus (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - WebRTC-SDK (125.6422.07) |   - WebRTC-SDK (137.7151.04) | ||||||
|  |  | ||||||
| DEPENDENCIES: | DEPENDENCIES: | ||||||
|   - Alamofire |   - Alamofire | ||||||
|  |   - app_links (from `.symlinks/plugins/app_links/ios`) | ||||||
|   - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) |   - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) | ||||||
|   - croppy (from `.symlinks/plugins/croppy/ios`) |   - croppy (from `.symlinks/plugins/croppy/ios`) | ||||||
|   - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) |   - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) | ||||||
|   - file_picker (from `.symlinks/plugins/file_picker/ios`) |   - file_picker (from `.symlinks/plugins/file_picker/ios`) | ||||||
|  |   - file_saver (from `.symlinks/plugins/file_saver/ios`) | ||||||
|  |   - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) | ||||||
|   - firebase_core (from `.symlinks/plugins/firebase_core/ios`) |   - firebase_core (from `.symlinks/plugins/firebase_core/ios`) | ||||||
|  |   - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`) | ||||||
|   - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) |   - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) | ||||||
|   - Flutter (from `Flutter`) |   - Flutter (from `Flutter`) | ||||||
|  |   - flutter_app_update (from `.symlinks/plugins/flutter_app_update/ios`) | ||||||
|   - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) |   - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) | ||||||
|  |   - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) | ||||||
|  |   - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) | ||||||
|   - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) |   - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) | ||||||
|   - flutter_platform_alert (from `.symlinks/plugins/flutter_platform_alert/ios`) |   - flutter_platform_alert (from `.symlinks/plugins/flutter_platform_alert/ios`) | ||||||
|   - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) |   - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) | ||||||
| @@ -227,6 +348,7 @@ DEPENDENCIES: | |||||||
|   - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) |   - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) | ||||||
|   - irondash_engine_context (from `.symlinks/plugins/irondash_engine_context/ios`) |   - irondash_engine_context (from `.symlinks/plugins/irondash_engine_context/ios`) | ||||||
|   - Kingfisher (~> 8.0) |   - Kingfisher (~> 8.0) | ||||||
|  |   - KingfisherWebP | ||||||
|   - livekit_client (from `.symlinks/plugins/livekit_client/ios`) |   - livekit_client (from `.symlinks/plugins/livekit_client/ios`) | ||||||
|   - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) |   - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) | ||||||
|   - media_kit_libs_ios_video (from `.symlinks/plugins/media_kit_libs_ios_video/ios`) |   - media_kit_libs_ios_video (from `.symlinks/plugins/media_kit_libs_ios_video/ios`) | ||||||
| @@ -235,6 +357,7 @@ DEPENDENCIES: | |||||||
|   - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) |   - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) | ||||||
|   - pasteboard (from `.symlinks/plugins/pasteboard/ios`) |   - pasteboard (from `.symlinks/plugins/pasteboard/ios`) | ||||||
|   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) |   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) | ||||||
|  |   - pointer_interceptor_ios (from `.symlinks/plugins/pointer_interceptor_ios/ios`) | ||||||
|   - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) |   - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) | ||||||
|   - record_ios (from `.symlinks/plugins/record_ios/ios`) |   - record_ios (from `.symlinks/plugins/record_ios/ios`) | ||||||
|   - share_plus (from `.symlinks/plugins/share_plus/ios`) |   - share_plus (from `.symlinks/plugins/share_plus/ios`) | ||||||
| @@ -243,6 +366,7 @@ DEPENDENCIES: | |||||||
|   - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) |   - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) | ||||||
|   - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`) |   - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`) | ||||||
|   - super_native_extensions (from `.symlinks/plugins/super_native_extensions/ios`) |   - super_native_extensions (from `.symlinks/plugins/super_native_extensions/ios`) | ||||||
|  |   - syncfusion_flutter_pdfviewer (from `.symlinks/plugins/syncfusion_flutter_pdfviewer/ios`) | ||||||
|   - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) |   - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) | ||||||
|   - volume_controller (from `.symlinks/plugins/volume_controller/ios`) |   - volume_controller (from `.symlinks/plugins/volume_controller/ios`) | ||||||
|   - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) |   - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) | ||||||
| @@ -253,16 +377,26 @@ SPEC REPOS: | |||||||
|     - DKImagePickerController |     - DKImagePickerController | ||||||
|     - DKPhotoGallery |     - DKPhotoGallery | ||||||
|     - Firebase |     - Firebase | ||||||
|  |     - FirebaseAnalytics | ||||||
|     - FirebaseCore |     - FirebaseCore | ||||||
|  |     - FirebaseCoreExtension | ||||||
|     - FirebaseCoreInternal |     - FirebaseCoreInternal | ||||||
|  |     - FirebaseCrashlytics | ||||||
|     - FirebaseInstallations |     - FirebaseInstallations | ||||||
|     - FirebaseMessaging |     - FirebaseMessaging | ||||||
|  |     - FirebaseRemoteConfigInterop | ||||||
|  |     - FirebaseSessions | ||||||
|  |     - GoogleAdsOnDeviceConversion | ||||||
|  |     - GoogleAppMeasurement | ||||||
|     - GoogleDataTransport |     - GoogleDataTransport | ||||||
|     - GoogleUtilities |     - GoogleUtilities | ||||||
|     - Kingfisher |     - Kingfisher | ||||||
|  |     - KingfisherWebP | ||||||
|  |     - libwebp | ||||||
|     - nanopb |     - nanopb | ||||||
|     - OrderedSet |     - OrderedSet | ||||||
|     - PromisesObjC |     - PromisesObjC | ||||||
|  |     - PromisesSwift | ||||||
|     - SAMKeychain |     - SAMKeychain | ||||||
|     - SDWebImage |     - SDWebImage | ||||||
|     - sqlite3 |     - sqlite3 | ||||||
| @@ -270,6 +404,8 @@ SPEC REPOS: | |||||||
|     - WebRTC-SDK |     - WebRTC-SDK | ||||||
|  |  | ||||||
| EXTERNAL SOURCES: | EXTERNAL SOURCES: | ||||||
|  |   app_links: | ||||||
|  |     :path: ".symlinks/plugins/app_links/ios" | ||||||
|   connectivity_plus: |   connectivity_plus: | ||||||
|     :path: ".symlinks/plugins/connectivity_plus/ios" |     :path: ".symlinks/plugins/connectivity_plus/ios" | ||||||
|   croppy: |   croppy: | ||||||
| @@ -278,14 +414,26 @@ EXTERNAL SOURCES: | |||||||
|     :path: ".symlinks/plugins/device_info_plus/ios" |     :path: ".symlinks/plugins/device_info_plus/ios" | ||||||
|   file_picker: |   file_picker: | ||||||
|     :path: ".symlinks/plugins/file_picker/ios" |     :path: ".symlinks/plugins/file_picker/ios" | ||||||
|  |   file_saver: | ||||||
|  |     :path: ".symlinks/plugins/file_saver/ios" | ||||||
|  |   firebase_analytics: | ||||||
|  |     :path: ".symlinks/plugins/firebase_analytics/ios" | ||||||
|   firebase_core: |   firebase_core: | ||||||
|     :path: ".symlinks/plugins/firebase_core/ios" |     :path: ".symlinks/plugins/firebase_core/ios" | ||||||
|  |   firebase_crashlytics: | ||||||
|  |     :path: ".symlinks/plugins/firebase_crashlytics/ios" | ||||||
|   firebase_messaging: |   firebase_messaging: | ||||||
|     :path: ".symlinks/plugins/firebase_messaging/ios" |     :path: ".symlinks/plugins/firebase_messaging/ios" | ||||||
|   Flutter: |   Flutter: | ||||||
|     :path: Flutter |     :path: Flutter | ||||||
|  |   flutter_app_update: | ||||||
|  |     :path: ".symlinks/plugins/flutter_app_update/ios" | ||||||
|   flutter_inappwebview_ios: |   flutter_inappwebview_ios: | ||||||
|     :path: ".symlinks/plugins/flutter_inappwebview_ios/ios" |     :path: ".symlinks/plugins/flutter_inappwebview_ios/ios" | ||||||
|  |   flutter_keyboard_visibility: | ||||||
|  |     :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" | ||||||
|  |   flutter_local_notifications: | ||||||
|  |     :path: ".symlinks/plugins/flutter_local_notifications/ios" | ||||||
|   flutter_native_splash: |   flutter_native_splash: | ||||||
|     :path: ".symlinks/plugins/flutter_native_splash/ios" |     :path: ".symlinks/plugins/flutter_native_splash/ios" | ||||||
|   flutter_platform_alert: |   flutter_platform_alert: | ||||||
| @@ -320,6 +468,8 @@ EXTERNAL SOURCES: | |||||||
|     :path: ".symlinks/plugins/pasteboard/ios" |     :path: ".symlinks/plugins/pasteboard/ios" | ||||||
|   path_provider_foundation: |   path_provider_foundation: | ||||||
|     :path: ".symlinks/plugins/path_provider_foundation/darwin" |     :path: ".symlinks/plugins/path_provider_foundation/darwin" | ||||||
|  |   pointer_interceptor_ios: | ||||||
|  |     :path: ".symlinks/plugins/pointer_interceptor_ios/ios" | ||||||
|   receive_sharing_intent: |   receive_sharing_intent: | ||||||
|     :path: ".symlinks/plugins/receive_sharing_intent/ios" |     :path: ".symlinks/plugins/receive_sharing_intent/ios" | ||||||
|   record_ios: |   record_ios: | ||||||
| @@ -336,6 +486,8 @@ EXTERNAL SOURCES: | |||||||
|     :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin" |     :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin" | ||||||
|   super_native_extensions: |   super_native_extensions: | ||||||
|     :path: ".symlinks/plugins/super_native_extensions/ios" |     :path: ".symlinks/plugins/super_native_extensions/ios" | ||||||
|  |   syncfusion_flutter_pdfviewer: | ||||||
|  |     :path: ".symlinks/plugins/syncfusion_flutter_pdfviewer/ios" | ||||||
|   url_launcher_ios: |   url_launcher_ios: | ||||||
|     :path: ".symlinks/plugins/url_launcher_ios/ios" |     :path: ".symlinks/plugins/url_launcher_ios/ios" | ||||||
|   volume_controller: |   volume_controller: | ||||||
| @@ -345,35 +497,51 @@ EXTERNAL SOURCES: | |||||||
|  |  | ||||||
| SPEC CHECKSUMS: | SPEC CHECKSUMS: | ||||||
|   Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496 |   Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496 | ||||||
|  |   app_links: 3dbc685f76b1693c66a6d9dd1e9ab6f73d97dc0a | ||||||
|   connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd |   connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd | ||||||
|   croppy: 979e8ddc254f4642bffe7d52dc7193354b27ba30 |   croppy: 979e8ddc254f4642bffe7d52dc7193354b27ba30 | ||||||
|   device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe |   device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe | ||||||
|   DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c |   DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c | ||||||
|   DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 |   DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 | ||||||
|   file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be |   file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be | ||||||
|   Firebase: 3435bc66b4d494c2f22c79fd3aae4c1db6662327 |   file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6 | ||||||
|   firebase_core: 700bac7ed92bb754fd70fbf01d72b36ecdd6d450 |   Firebase: f07b15ae5a6ec0f93713e30b923d9970d144af3e | ||||||
|   firebase_messaging: 860c017fcfbb5e27c163062d1d3135388f3ef954 |   firebase_analytics: 1d024068b1d4707d5ba7a42a12976ddf3316d835 | ||||||
|   FirebaseCore: c692c7f1c75305ab6aff2b367f25e11d73aa8bd0 |   firebase_core: 744984dbbed8b3036abf34f0b98d80f130a7e464 | ||||||
|   FirebaseCoreInternal: 29d7b3af4aaf0b8f3ed20b568c13df399b06f68c |   firebase_crashlytics: f3a9a4338ab99b67042f64e9e22e1bf349cb44ed | ||||||
|   FirebaseInstallations: 0ee9074f2c1e86561ace168ee1470dc67aabaf02 |   firebase_messaging: 82c70650c426a0a14873e1acdb9ec2b443c4e8b4 | ||||||
|   FirebaseMessaging: 195bbdb73e6ca1dbc76cd46e73f3552c084ef6e4 |   FirebaseAnalytics: 0fc2b20091f0ddd21bf73397cf8f0eb5346dc24f | ||||||
|   Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 |   FirebaseCore: bb595f3114953664e3c1dc032f008a244147cfd3 | ||||||
|  |   FirebaseCoreExtension: 7e1f7118ee970e001a8013719fb90950ee5e0018 | ||||||
|  |   FirebaseCoreInternal: d7f5a043c2cd01a08103ab586587c1468047bca6 | ||||||
|  |   FirebaseCrashlytics: a6ece278a837c7e88de2d9b5da0a3542f2342395 | ||||||
|  |   FirebaseInstallations: ae9f4902cb5bf1d0c5eaa31ec1f4e5495a0714e2 | ||||||
|  |   FirebaseMessaging: d33971b7bb252745ea6cd31ab190d1a1df4b8ed5 | ||||||
|  |   FirebaseRemoteConfigInterop: 1e31ec72b89c9924367c59bfb5ec9ab60d1d6766 | ||||||
|  |   FirebaseSessions: ba7c7a7ca8696a8d540eb3fe3800fbe98c79786d | ||||||
|  |   Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 | ||||||
|  |   flutter_app_update: 816fdb2e30e4832a7c45e3f108d391c42ef040a9 | ||||||
|   flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99 |   flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99 | ||||||
|  |   flutter_keyboard_visibility: 4625131e43015dbbe759d9b20daaf77e0e3f6619 | ||||||
|  |   flutter_local_notifications: a5a732f069baa862e728d839dd2ebb904737effb | ||||||
|   flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf |   flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf | ||||||
|   flutter_platform_alert: bf3b5fcd4ac14bd637e20527e9c471633071afd3 |   flutter_platform_alert: bf3b5fcd4ac14bd637e20527e9c471633071afd3 | ||||||
|   flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 |   flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 | ||||||
|   flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544 |   flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544 | ||||||
|   flutter_udid: f7c3884e6ec2951efe4f9de082257fc77c4d15e9 |   flutter_udid: f7c3884e6ec2951efe4f9de082257fc77c4d15e9 | ||||||
|   flutter_webrtc: fd0d3bdef8766a0736dbbe2e5b7e85f1f3c52117 |   flutter_webrtc: c3e21fc0dcd9d8eb246ae4d5256fcbeb2f5ecd22 | ||||||
|   gal: baecd024ebfd13c441269ca7404792a7152fde89 |   gal: baecd024ebfd13c441269ca7404792a7152fde89 | ||||||
|  |   GoogleAdsOnDeviceConversion: e03a386840803ea7eef3fd22a061930142c039c1 | ||||||
|  |   GoogleAppMeasurement: 1e718274b7e015cefd846ac1fcf7820c70dc017d | ||||||
|   GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 |   GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 | ||||||
|   GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 |   GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 | ||||||
|   image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a |   image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326 | ||||||
|   irondash_engine_context: 8e58ca8e0212ee9d1c7dc6a42121849986c88486 |   irondash_engine_context: 8e58ca8e0212ee9d1c7dc6a42121849986c88486 | ||||||
|   Kingfisher: 0621d0ac0c78fecb19f6dc5303bde2b52abaf2f5 |   Kingfisher: 7ac7a7288653787a54206b11a3c74f49ab650f1f | ||||||
|   livekit_client: 9e901890552514206e5ff828903ed271531da264 |   KingfisherWebP: 38b9721821947f547afb78f933f75f4f9e0ae402 | ||||||
|   local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391 |   libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 | ||||||
|  |   livekit_client: 86c8af579274e4b7a215185a8080db2d4e176f40 | ||||||
|  |   local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb | ||||||
|   media_kit_libs_ios_video: 5a18affdb97d1f5d466dc79988b13eff6c5e2854 |   media_kit_libs_ios_video: 5a18affdb97d1f5d466dc79988b13eff6c5e2854 | ||||||
|   media_kit_video: 1746e198cb697d1ffb734b1d05ec429d1fcd1474 |   media_kit_video: 1746e198cb697d1ffb734b1d05ec429d1fcd1474 | ||||||
|   nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 |   nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 | ||||||
| @@ -381,25 +549,28 @@ SPEC CHECKSUMS: | |||||||
|   OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 |   OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 | ||||||
|   package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 |   package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 | ||||||
|   pasteboard: 49088aeb6119d51f976a421db60d8e1ab079b63c |   pasteboard: 49088aeb6119d51f976a421db60d8e1ab079b63c | ||||||
|   path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 |   path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880 | ||||||
|  |   pointer_interceptor_ios: da06a662d5bfd329602b45b2ab41bc0fb5fdb0f0 | ||||||
|   PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 |   PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 | ||||||
|  |   PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 | ||||||
|   receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00 |   receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00 | ||||||
|   record_ios: fee1c924aa4879b882ebca2b4bce6011bcfc3d8b |   record_ios: f75fa1d57f840012775c0e93a38a7f3ceea1a374 | ||||||
|   SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c |   SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c | ||||||
|   SDWebImage: f29024626962457f3470184232766516dee8dfea |   SDWebImage: 16309af6d214ba3f77a7c6f6fdda888cb313a50a | ||||||
|   share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a |   share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a | ||||||
|   shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 |   shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb | ||||||
|   sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418 |   sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418 | ||||||
|   sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 |   sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 | ||||||
|   sqlite3: 1d85290c3321153511f6e900ede7a1608718bbd5 |   sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b | ||||||
|   sqlite3_flutter_libs: e7fc8c9ea2200ff3271f08f127842131746b70e2 |   sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1 | ||||||
|   super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4 |   super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4 | ||||||
|   SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 |   SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 | ||||||
|   url_launcher_ios: 694010445543906933d732453a59da0a173ae33d |   syncfusion_flutter_pdfviewer: 90dc48305d2e33d4aa20681d1e98ddeda891bc14 | ||||||
|  |   url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b | ||||||
|   volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12 |   volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12 | ||||||
|   wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556 |   wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556 | ||||||
|   WebRTC-SDK: dff00a3892bc570b6014e046297782084071657e |   WebRTC-SDK: 40d4f5ba05cadff14e4db5614aec402a633f007e | ||||||
|  |  | ||||||
| PODFILE CHECKSUM: f6df17c2a0cbd7af89692fd3877231eaea40230f | PODFILE CHECKSUM: fa173dbf2c15b3248d7fd65204fa9d6c4a6f13d6 | ||||||
|  |  | ||||||
| COCOAPODS: 1.16.2 | COCOAPODS: 1.16.2 | ||||||
|   | |||||||
| @@ -10,6 +10,9 @@ | |||||||
| 		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; | 		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; | ||||||
| 		331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; | 		331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; | ||||||
| 		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; | 		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; | ||||||
|  | 		7310A7DF2EB10963002C0FD3 /* WatchRunner Watch App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 7310A7D42EB10962002C0FD3 /* WatchRunner Watch App.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; | ||||||
|  | 		73ACDFAD2E3D0E6100B63535 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */; }; | ||||||
|  | 		73ACDFC32E3D0E6100B63535 /* SolianBroadcastExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; | ||||||
| 		73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; | 		73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; | ||||||
| 		73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; | 		73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; | ||||||
| 		73D4264B2DEB815D006C0AAE /* NotifyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */; }; | 		73D4264B2DEB815D006C0AAE /* NotifyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */; }; | ||||||
| @@ -18,6 +21,7 @@ | |||||||
| 		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; | 		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; | ||||||
| 		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; | 		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; | ||||||
| 		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; | 		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; | ||||||
|  | 		A1D34487886D362AC8B99B2E /* Pods_WatchRunner_Watch_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 802C1CFCA7F1E069AAEFB454 /* Pods_WatchRunner_Watch_App.framework */; }; | ||||||
| 		B87C0E607033790E71B54D73 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6D834CA86410B09796B312B /* Pods_Runner.framework */; }; | 		B87C0E607033790E71B54D73 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6D834CA86410B09796B312B /* Pods_Runner.framework */; }; | ||||||
| 		D174D53FF3E8EA943491A5CC /* Pods_SolianShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */; }; | 		D174D53FF3E8EA943491A5CC /* Pods_SolianShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */; }; | ||||||
| 		D1772CE196985AE8E8C9F2E5 /* Pods_SolianNotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */; }; | 		D1772CE196985AE8E8C9F2E5 /* Pods_SolianNotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */; }; | ||||||
| @@ -32,6 +36,13 @@ | |||||||
| 			remoteGlobalIDString = 97C146ED1CF9000F007C117D; | 			remoteGlobalIDString = 97C146ED1CF9000F007C117D; | ||||||
| 			remoteInfo = Runner; | 			remoteInfo = Runner; | ||||||
| 		}; | 		}; | ||||||
|  | 		73ACDFC12E3D0E6100B63535 /* PBXContainerItemProxy */ = { | ||||||
|  | 			isa = PBXContainerItemProxy; | ||||||
|  | 			containerPortal = 97C146E61CF9000F007C117D /* Project object */; | ||||||
|  | 			proxyType = 1; | ||||||
|  | 			remoteGlobalIDString = 73ACDFAA2E3D0E6100B63535; | ||||||
|  | 			remoteInfo = SolianBroadcastExtension; | ||||||
|  | 		}; | ||||||
| 		73C305D62E0BE878009035B9 /* PBXContainerItemProxy */ = { | 		73C305D62E0BE878009035B9 /* PBXContainerItemProxy */ = { | ||||||
| 			isa = PBXContainerItemProxy; | 			isa = PBXContainerItemProxy; | ||||||
| 			containerPortal = 97C146E61CF9000F007C117D /* Project object */; | 			containerPortal = 97C146E61CF9000F007C117D /* Project object */; | ||||||
| @@ -49,12 +60,24 @@ | |||||||
| /* End PBXContainerItemProxy section */ | /* End PBXContainerItemProxy section */ | ||||||
|  |  | ||||||
| /* Begin PBXCopyFilesBuildPhase section */ | /* Begin PBXCopyFilesBuildPhase section */ | ||||||
|  | 		7310A7DE2EB10963002C0FD3 /* Embed Watch Content */ = { | ||||||
|  | 			isa = PBXCopyFilesBuildPhase; | ||||||
|  | 			buildActionMask = 12; | ||||||
|  | 			dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; | ||||||
|  | 			dstSubfolderSpec = 16; | ||||||
|  | 			files = ( | ||||||
|  | 				7310A7DF2EB10963002C0FD3 /* WatchRunner Watch App.app in Embed Watch Content */, | ||||||
|  | 			); | ||||||
|  | 			name = "Embed Watch Content"; | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 		}; | ||||||
| 		73268D1D2DEAFD670076E970 /* Embed Foundation Extensions */ = { | 		73268D1D2DEAFD670076E970 /* Embed Foundation Extensions */ = { | ||||||
| 			isa = PBXCopyFilesBuildPhase; | 			isa = PBXCopyFilesBuildPhase; | ||||||
| 			buildActionMask = 2147483647; | 			buildActionMask = 2147483647; | ||||||
| 			dstPath = ""; | 			dstPath = ""; | ||||||
| 			dstSubfolderSpec = 13; | 			dstSubfolderSpec = 13; | ||||||
| 			files = ( | 			files = ( | ||||||
|  | 				73ACDFC32E3D0E6100B63535 /* SolianBroadcastExtension.appex in Embed Foundation Extensions */, | ||||||
| 				73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */, | 				73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */, | ||||||
| 				73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */, | 				73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */, | ||||||
| 			); | 			); | ||||||
| @@ -74,6 +97,7 @@ | |||||||
| /* End PBXCopyFilesBuildPhase section */ | /* End PBXCopyFilesBuildPhase section */ | ||||||
|  |  | ||||||
| /* Begin PBXFileReference section */ | /* Begin PBXFileReference section */ | ||||||
|  | 		103EA2362B9E9F127016A1F1 /* Pods-WatchRunner Watch App.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchRunner Watch App.profile.xcconfig"; path = "Target Support Files/Pods-WatchRunner Watch App/Pods-WatchRunner Watch App.profile.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		14118AC858B441AB16B7309E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; }; | 		14118AC858B441AB16B7309E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; | 		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; | ||||||
| 		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; | 		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; | ||||||
| @@ -90,7 +114,11 @@ | |||||||
| 		39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SolianNotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | 		39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SolianNotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
| 		3A1C47BD29CC6AC2587D4DBE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; | 		3A1C47BD29CC6AC2587D4DBE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; | 		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; | ||||||
|  | 		7310A7D42EB10962002C0FD3 /* WatchRunner Watch App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "WatchRunner Watch App.app"; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
| 		737E920B2DB6A9FF00BE9CDB /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; }; | 		737E920B2DB6A9FF00BE9CDB /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; }; | ||||||
|  | 		73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
|  | 		73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; | ||||||
|  | 		73ACDFB82E3D0E6100B63535 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; | ||||||
| 		73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; | 		73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
| 		73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; | 		73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
| 		73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotifyDelegate.swift; sourceTree = "<group>"; }; | 		73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotifyDelegate.swift; sourceTree = "<group>"; }; | ||||||
| @@ -98,6 +126,8 @@ | |||||||
| 		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | 		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | ||||||
| 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; | 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; | ||||||
| 		7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SolianShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | 		7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SolianShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
|  | 		802C1CFCA7F1E069AAEFB454 /* Pods_WatchRunner_Watch_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WatchRunner_Watch_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
|  | 		86D60BA96DA647E1B11AA7F0 /* Pods-WatchRunner Watch App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchRunner Watch App.debug.xcconfig"; path = "Target Support Files/Pods-WatchRunner Watch App/Pods-WatchRunner Watch App.debug.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		8B40620B1EEBB09456406A3C /* Pods-SolianNotificationService.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SolianNotificationService.profile.xcconfig"; path = "Target Support Files/Pods-SolianNotificationService/Pods-SolianNotificationService.profile.xcconfig"; sourceTree = "<group>"; }; | 		8B40620B1EEBB09456406A3C /* Pods-SolianNotificationService.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SolianNotificationService.profile.xcconfig"; path = "Target Support Files/Pods-SolianNotificationService/Pods-SolianNotificationService.profile.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; | 		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; | ||||||
| 		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; | 		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; | ||||||
| @@ -107,6 +137,7 @@ | |||||||
| 		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | 		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | ||||||
| 		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | 		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | ||||||
| 		9AE244813FCDFAA941430393 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = "<group>"; }; | 		9AE244813FCDFAA941430393 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = "<group>"; }; | ||||||
|  | 		A2EB1DAFDE9B8E6D88BBF7A3 /* Pods-WatchRunner Watch App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchRunner Watch App.release.xcconfig"; path = "Target Support Files/Pods-WatchRunner Watch App/Pods-WatchRunner Watch App.release.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		A499FDB2082EB000933AA8C5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; }; | 		A499FDB2082EB000933AA8C5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		A85FF612AE7623A9934E57CE /* Pods-SolianShareExtension.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SolianShareExtension.profile.xcconfig"; path = "Target Support Files/Pods-SolianShareExtension/Pods-SolianShareExtension.profile.xcconfig"; sourceTree = "<group>"; }; | 		A85FF612AE7623A9934E57CE /* Pods-SolianShareExtension.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SolianShareExtension.profile.xcconfig"; path = "Target Support Files/Pods-SolianShareExtension/Pods-SolianShareExtension.profile.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | 		AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
| @@ -117,6 +148,13 @@ | |||||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||||
|  |  | ||||||
| /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ | /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ | ||||||
|  | 		73ACDFCA2E3D0E6100B63535 /* Exceptions for "SolianBroadcastExtension" folder in "SolianBroadcastExtension" target */ = { | ||||||
|  | 			isa = PBXFileSystemSynchronizedBuildFileExceptionSet; | ||||||
|  | 			membershipExceptions = ( | ||||||
|  | 				Info.plist, | ||||||
|  | 			); | ||||||
|  | 			target = 73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */; | ||||||
|  | 		}; | ||||||
| 		73C305DC2E0BE878009035B9 /* Exceptions for "SolianShareExtension" folder in "SolianShareExtension" target */ = { | 		73C305DC2E0BE878009035B9 /* Exceptions for "SolianShareExtension" folder in "SolianShareExtension" target */ = { | ||||||
| 			isa = PBXFileSystemSynchronizedBuildFileExceptionSet; | 			isa = PBXFileSystemSynchronizedBuildFileExceptionSet; | ||||||
| 			membershipExceptions = ( | 			membershipExceptions = ( | ||||||
| @@ -142,6 +180,13 @@ | |||||||
| /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ | /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ | ||||||
|  |  | ||||||
| /* Begin PBXFileSystemSynchronizedRootGroup section */ | /* Begin PBXFileSystemSynchronizedRootGroup section */ | ||||||
|  | 		7310A7D52EB10962002C0FD3 /* WatchRunner Watch App */ = { | ||||||
|  | 			isa = PBXFileSystemSynchronizedRootGroup; | ||||||
|  | 			exceptions = ( | ||||||
|  | 			); | ||||||
|  | 			path = "WatchRunner Watch App"; | ||||||
|  | 			sourceTree = "<group>"; | ||||||
|  | 		}; | ||||||
| 		73268D272DEB012A0076E970 /* Services */ = { | 		73268D272DEB012A0076E970 /* Services */ = { | ||||||
| 			isa = PBXFileSystemSynchronizedRootGroup; | 			isa = PBXFileSystemSynchronizedRootGroup; | ||||||
| 			exceptions = ( | 			exceptions = ( | ||||||
| @@ -150,6 +195,14 @@ | |||||||
| 			path = Services; | 			path = Services; | ||||||
| 			sourceTree = "<group>"; | 			sourceTree = "<group>"; | ||||||
| 		}; | 		}; | ||||||
|  | 		73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */ = { | ||||||
|  | 			isa = PBXFileSystemSynchronizedRootGroup; | ||||||
|  | 			exceptions = ( | ||||||
|  | 				73ACDFCA2E3D0E6100B63535 /* Exceptions for "SolianBroadcastExtension" folder in "SolianBroadcastExtension" target */, | ||||||
|  | 			); | ||||||
|  | 			path = SolianBroadcastExtension; | ||||||
|  | 			sourceTree = "<group>"; | ||||||
|  | 		}; | ||||||
| 		73C305CF2E0BE878009035B9 /* SolianShareExtension */ = { | 		73C305CF2E0BE878009035B9 /* SolianShareExtension */ = { | ||||||
| 			isa = PBXFileSystemSynchronizedRootGroup; | 			isa = PBXFileSystemSynchronizedRootGroup; | ||||||
| 			exceptions = ( | 			exceptions = ( | ||||||
| @@ -177,6 +230,22 @@ | |||||||
| 			); | 			); | ||||||
| 			runOnlyForDeploymentPostprocessing = 0; | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
| 		}; | 		}; | ||||||
|  | 		7310A7D12EB10962002C0FD3 /* Frameworks */ = { | ||||||
|  | 			isa = PBXFrameworksBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 				A1D34487886D362AC8B99B2E /* Pods_WatchRunner_Watch_App.framework in Frameworks */, | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 		}; | ||||||
|  | 		73ACDFA82E3D0E6100B63535 /* Frameworks */ = { | ||||||
|  | 			isa = PBXFrameworksBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 				73ACDFAD2E3D0E6100B63535 /* ReplayKit.framework in Frameworks */, | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 		}; | ||||||
| 		73C305CB2E0BE878009035B9 /* Frameworks */ = { | 		73C305CB2E0BE878009035B9 /* Frameworks */ = { | ||||||
| 			isa = PBXFrameworksBuildPhase; | 			isa = PBXFrameworksBuildPhase; | ||||||
| 			buildActionMask = 2147483647; | 			buildActionMask = 2147483647; | ||||||
| @@ -220,6 +289,9 @@ | |||||||
| 				AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */, | 				AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */, | ||||||
| 				39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */, | 				39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */, | ||||||
| 				7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */, | 				7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */, | ||||||
|  | 				73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */, | ||||||
|  | 				73ACDFB82E3D0E6100B63535 /* UIKit.framework */, | ||||||
|  | 				802C1CFCA7F1E069AAEFB454 /* Pods_WatchRunner_Watch_App.framework */, | ||||||
| 			); | 			); | ||||||
| 			name = Frameworks; | 			name = Frameworks; | ||||||
| 			sourceTree = "<group>"; | 			sourceTree = "<group>"; | ||||||
| @@ -242,6 +314,9 @@ | |||||||
| 				17FAB080A9C53193ABD9C15B /* Pods-SolianShareExtension.debug.xcconfig */, | 				17FAB080A9C53193ABD9C15B /* Pods-SolianShareExtension.debug.xcconfig */, | ||||||
| 				27C66EFB5A705F1A822C3EB0 /* Pods-SolianShareExtension.release.xcconfig */, | 				27C66EFB5A705F1A822C3EB0 /* Pods-SolianShareExtension.release.xcconfig */, | ||||||
| 				A85FF612AE7623A9934E57CE /* Pods-SolianShareExtension.profile.xcconfig */, | 				A85FF612AE7623A9934E57CE /* Pods-SolianShareExtension.profile.xcconfig */, | ||||||
|  | 				86D60BA96DA647E1B11AA7F0 /* Pods-WatchRunner Watch App.debug.xcconfig */, | ||||||
|  | 				A2EB1DAFDE9B8E6D88BBF7A3 /* Pods-WatchRunner Watch App.release.xcconfig */, | ||||||
|  | 				103EA2362B9E9F127016A1F1 /* Pods-WatchRunner Watch App.profile.xcconfig */, | ||||||
| 			); | 			); | ||||||
| 			path = Pods; | 			path = Pods; | ||||||
| 			sourceTree = "<group>"; | 			sourceTree = "<group>"; | ||||||
| @@ -264,6 +339,8 @@ | |||||||
| 				97C146F01CF9000F007C117D /* Runner */, | 				97C146F01CF9000F007C117D /* Runner */, | ||||||
| 				73CDD67B2DEC00480059D95D /* SolianNotificationService */, | 				73CDD67B2DEC00480059D95D /* SolianNotificationService */, | ||||||
| 				73C305CF2E0BE878009035B9 /* SolianShareExtension */, | 				73C305CF2E0BE878009035B9 /* SolianShareExtension */, | ||||||
|  | 				73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */, | ||||||
|  | 				7310A7D52EB10962002C0FD3 /* WatchRunner Watch App */, | ||||||
| 				97C146EF1CF9000F007C117D /* Products */, | 				97C146EF1CF9000F007C117D /* Products */, | ||||||
| 				331C8082294A63A400263BE5 /* RunnerTests */, | 				331C8082294A63A400263BE5 /* RunnerTests */, | ||||||
| 				91E124CE95BCB4DCD890160D /* Pods */, | 				91E124CE95BCB4DCD890160D /* Pods */, | ||||||
| @@ -279,6 +356,8 @@ | |||||||
| 				331C8081294A63A400263BE5 /* RunnerTests.xctest */, | 				331C8081294A63A400263BE5 /* RunnerTests.xctest */, | ||||||
| 				73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */, | 				73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */, | ||||||
| 				73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */, | 				73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */, | ||||||
|  | 				73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */, | ||||||
|  | 				7310A7D42EB10962002C0FD3 /* WatchRunner Watch App.app */, | ||||||
| 			); | 			); | ||||||
| 			name = Products; | 			name = Products; | ||||||
| 			sourceTree = "<group>"; | 			sourceTree = "<group>"; | ||||||
| @@ -323,6 +402,48 @@ | |||||||
| 			productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; | 			productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; | ||||||
| 			productType = "com.apple.product-type.bundle.unit-test"; | 			productType = "com.apple.product-type.bundle.unit-test"; | ||||||
| 		}; | 		}; | ||||||
|  | 		7310A7D32EB10962002C0FD3 /* WatchRunner Watch App */ = { | ||||||
|  | 			isa = PBXNativeTarget; | ||||||
|  | 			buildConfigurationList = 7310A7E32EB10963002C0FD3 /* Build configuration list for PBXNativeTarget "WatchRunner Watch App" */; | ||||||
|  | 			buildPhases = ( | ||||||
|  | 				DDEDA1BA6278B94F0F7B9B61 /* [CP] Check Pods Manifest.lock */, | ||||||
|  | 				7310A7D02EB10962002C0FD3 /* Sources */, | ||||||
|  | 				7310A7D12EB10962002C0FD3 /* Frameworks */, | ||||||
|  | 				7310A7D22EB10962002C0FD3 /* Resources */, | ||||||
|  | 				E29ECA5954168075BDB000DC /* [CP] Embed Pods Frameworks */, | ||||||
|  | 			); | ||||||
|  | 			buildRules = ( | ||||||
|  | 			); | ||||||
|  | 			dependencies = ( | ||||||
|  | 			); | ||||||
|  | 			fileSystemSynchronizedGroups = ( | ||||||
|  | 				7310A7D52EB10962002C0FD3 /* WatchRunner Watch App */, | ||||||
|  | 			); | ||||||
|  | 			name = "WatchRunner Watch App"; | ||||||
|  | 			productName = "WatchRunner Watch App"; | ||||||
|  | 			productReference = 7310A7D42EB10962002C0FD3 /* WatchRunner Watch App.app */; | ||||||
|  | 			productType = "com.apple.product-type.application"; | ||||||
|  | 		}; | ||||||
|  | 		73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */ = { | ||||||
|  | 			isa = PBXNativeTarget; | ||||||
|  | 			buildConfigurationList = 73ACDFCB2E3D0E6100B63535 /* Build configuration list for PBXNativeTarget "SolianBroadcastExtension" */; | ||||||
|  | 			buildPhases = ( | ||||||
|  | 				73ACDFA72E3D0E6100B63535 /* Sources */, | ||||||
|  | 				73ACDFA82E3D0E6100B63535 /* Frameworks */, | ||||||
|  | 				73ACDFA92E3D0E6100B63535 /* Resources */, | ||||||
|  | 			); | ||||||
|  | 			buildRules = ( | ||||||
|  | 			); | ||||||
|  | 			dependencies = ( | ||||||
|  | 			); | ||||||
|  | 			fileSystemSynchronizedGroups = ( | ||||||
|  | 				73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */, | ||||||
|  | 			); | ||||||
|  | 			name = SolianBroadcastExtension; | ||||||
|  | 			productName = SolianBroadcastExtension; | ||||||
|  | 			productReference = 73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */; | ||||||
|  | 			productType = "com.apple.product-type.app-extension"; | ||||||
|  | 		}; | ||||||
| 		73C305CD2E0BE878009035B9 /* SolianShareExtension */ = { | 		73C305CD2E0BE878009035B9 /* SolianShareExtension */ = { | ||||||
| 			isa = PBXNativeTarget; | 			isa = PBXNativeTarget; | ||||||
| 			buildConfigurationList = 73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */; | 			buildConfigurationList = 73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */; | ||||||
| @@ -374,17 +495,20 @@ | |||||||
| 				97C146EA1CF9000F007C117D /* Sources */, | 				97C146EA1CF9000F007C117D /* Sources */, | ||||||
| 				97C146EB1CF9000F007C117D /* Frameworks */, | 				97C146EB1CF9000F007C117D /* Frameworks */, | ||||||
| 				73268D1D2DEAFD670076E970 /* Embed Foundation Extensions */, | 				73268D1D2DEAFD670076E970 /* Embed Foundation Extensions */, | ||||||
|  | 				7310A7DE2EB10963002C0FD3 /* Embed Watch Content */, | ||||||
| 				97C146EC1CF9000F007C117D /* Resources */, | 				97C146EC1CF9000F007C117D /* Resources */, | ||||||
| 				9705A1C41CF9048500538489 /* Embed Frameworks */, | 				9705A1C41CF9048500538489 /* Embed Frameworks */, | ||||||
| 				3B06AD1E1E4923F5004D2608 /* Thin Binary */, | 				3B06AD1E1E4923F5004D2608 /* Thin Binary */, | ||||||
| 				8C0351B03869BBF493808288 /* [CP] Embed Pods Frameworks */, | 				8C0351B03869BBF493808288 /* [CP] Embed Pods Frameworks */, | ||||||
| 				5E7D6EF29B671AC7EDBA5649 /* [CP] Copy Pods Resources */, | 				5E7D6EF29B671AC7EDBA5649 /* [CP] Copy Pods Resources */, | ||||||
|  | 				E86CDE9D6464F4F52B910856 /* FlutterFire: "flutterfire upload-crashlytics-symbols" */, | ||||||
| 			); | 			); | ||||||
| 			buildRules = ( | 			buildRules = ( | ||||||
| 			); | 			); | ||||||
| 			dependencies = ( | 			dependencies = ( | ||||||
| 				73CDD6802DEC00480059D95D /* PBXTargetDependency */, | 				73CDD6802DEC00480059D95D /* PBXTargetDependency */, | ||||||
| 				73C305D72E0BE878009035B9 /* PBXTargetDependency */, | 				73C305D72E0BE878009035B9 /* PBXTargetDependency */, | ||||||
|  | 				73ACDFC22E3D0E6100B63535 /* PBXTargetDependency */, | ||||||
| 			); | 			); | ||||||
| 			fileSystemSynchronizedGroups = ( | 			fileSystemSynchronizedGroups = ( | ||||||
| 				73268D272DEB012A0076E970 /* Services */, | 				73268D272DEB012A0076E970 /* Services */, | ||||||
| @@ -401,7 +525,7 @@ | |||||||
| 			isa = PBXProject; | 			isa = PBXProject; | ||||||
| 			attributes = { | 			attributes = { | ||||||
| 				BuildIndependentTargetsInParallel = YES; | 				BuildIndependentTargetsInParallel = YES; | ||||||
| 				LastSwiftUpdateCheck = 1640; | 				LastSwiftUpdateCheck = 2600; | ||||||
| 				LastUpgradeCheck = 1510; | 				LastUpgradeCheck = 1510; | ||||||
| 				ORGANIZATIONNAME = ""; | 				ORGANIZATIONNAME = ""; | ||||||
| 				TargetAttributes = { | 				TargetAttributes = { | ||||||
| @@ -409,6 +533,12 @@ | |||||||
| 						CreatedOnToolsVersion = 14.0; | 						CreatedOnToolsVersion = 14.0; | ||||||
| 						TestTargetID = 97C146ED1CF9000F007C117D; | 						TestTargetID = 97C146ED1CF9000F007C117D; | ||||||
| 					}; | 					}; | ||||||
|  | 					7310A7D32EB10962002C0FD3 = { | ||||||
|  | 						CreatedOnToolsVersion = 26.0.1; | ||||||
|  | 					}; | ||||||
|  | 					73ACDFAA2E3D0E6100B63535 = { | ||||||
|  | 						CreatedOnToolsVersion = 16.4; | ||||||
|  | 					}; | ||||||
| 					73C305CD2E0BE878009035B9 = { | 					73C305CD2E0BE878009035B9 = { | ||||||
| 						CreatedOnToolsVersion = 16.4; | 						CreatedOnToolsVersion = 16.4; | ||||||
| 					}; | 					}; | ||||||
| @@ -438,6 +568,8 @@ | |||||||
| 				331C8080294A63A400263BE5 /* RunnerTests */, | 				331C8080294A63A400263BE5 /* RunnerTests */, | ||||||
| 				73CDD6792DEC00480059D95D /* SolianNotificationService */, | 				73CDD6792DEC00480059D95D /* SolianNotificationService */, | ||||||
| 				73C305CD2E0BE878009035B9 /* SolianShareExtension */, | 				73C305CD2E0BE878009035B9 /* SolianShareExtension */, | ||||||
|  | 				73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */, | ||||||
|  | 				7310A7D32EB10962002C0FD3 /* WatchRunner Watch App */, | ||||||
| 			); | 			); | ||||||
| 		}; | 		}; | ||||||
| /* End PBXProject section */ | /* End PBXProject section */ | ||||||
| @@ -450,6 +582,20 @@ | |||||||
| 			); | 			); | ||||||
| 			runOnlyForDeploymentPostprocessing = 0; | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
| 		}; | 		}; | ||||||
|  | 		7310A7D22EB10962002C0FD3 /* Resources */ = { | ||||||
|  | 			isa = PBXResourcesBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 		}; | ||||||
|  | 		73ACDFA92E3D0E6100B63535 /* Resources */ = { | ||||||
|  | 			isa = PBXResourcesBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 		}; | ||||||
| 		73C305CC2E0BE878009035B9 /* Resources */ = { | 		73C305CC2E0BE878009035B9 /* Resources */ = { | ||||||
| 			isa = PBXResourcesBuildPhase; | 			isa = PBXResourcesBuildPhase; | ||||||
| 			buildActionMask = 2147483647; | 			buildActionMask = 2147483647; | ||||||
| @@ -493,7 +639,7 @@ | |||||||
| 			); | 			); | ||||||
| 			runOnlyForDeploymentPostprocessing = 0; | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
| 			shellPath = /bin/sh; | 			shellPath = /bin/sh; | ||||||
| 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; | 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin\n"; | ||||||
| 		}; | 		}; | ||||||
| 		4815E0A19398E51078F4160D /* [CP] Check Pods Manifest.lock */ = { | 		4815E0A19398E51078F4160D /* [CP] Check Pods Manifest.lock */ = { | ||||||
| 			isa = PBXShellScriptBuildPhase; | 			isa = PBXShellScriptBuildPhase; | ||||||
| @@ -610,6 +756,63 @@ | |||||||
| 			shellPath = /bin/sh; | 			shellPath = /bin/sh; | ||||||
| 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; | 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; | ||||||
| 		}; | 		}; | ||||||
|  | 		DDEDA1BA6278B94F0F7B9B61 /* [CP] Check Pods Manifest.lock */ = { | ||||||
|  | 			isa = PBXShellScriptBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			inputFileListPaths = ( | ||||||
|  | 			); | ||||||
|  | 			inputPaths = ( | ||||||
|  | 				"${PODS_PODFILE_DIR_PATH}/Podfile.lock", | ||||||
|  | 				"${PODS_ROOT}/Manifest.lock", | ||||||
|  | 			); | ||||||
|  | 			name = "[CP] Check Pods Manifest.lock"; | ||||||
|  | 			outputFileListPaths = ( | ||||||
|  | 			); | ||||||
|  | 			outputPaths = ( | ||||||
|  | 				"$(DERIVED_FILE_DIR)/Pods-WatchRunner Watch App-checkManifestLockResult.txt", | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 			shellPath = /bin/sh; | ||||||
|  | 			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; | ||||||
|  | 			showEnvVarsInLog = 0; | ||||||
|  | 		}; | ||||||
|  | 		E29ECA5954168075BDB000DC /* [CP] Embed Pods Frameworks */ = { | ||||||
|  | 			isa = PBXShellScriptBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			inputFileListPaths = ( | ||||||
|  | 				"${PODS_ROOT}/Target Support Files/Pods-WatchRunner Watch App/Pods-WatchRunner Watch App-frameworks-${CONFIGURATION}-input-files.xcfilelist", | ||||||
|  | 			); | ||||||
|  | 			name = "[CP] Embed Pods Frameworks"; | ||||||
|  | 			outputFileListPaths = ( | ||||||
|  | 				"${PODS_ROOT}/Target Support Files/Pods-WatchRunner Watch App/Pods-WatchRunner Watch App-frameworks-${CONFIGURATION}-output-files.xcfilelist", | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 			shellPath = /bin/sh; | ||||||
|  | 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WatchRunner Watch App/Pods-WatchRunner Watch App-frameworks.sh\"\n"; | ||||||
|  | 			showEnvVarsInLog = 0; | ||||||
|  | 		}; | ||||||
|  | 		E86CDE9D6464F4F52B910856 /* FlutterFire: "flutterfire upload-crashlytics-symbols" */ = { | ||||||
|  | 			isa = PBXShellScriptBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			inputFileListPaths = ( | ||||||
|  | 			); | ||||||
|  | 			inputPaths = ( | ||||||
|  | 			); | ||||||
|  | 			name = "FlutterFire: \"flutterfire upload-crashlytics-symbols\""; | ||||||
|  | 			outputFileListPaths = ( | ||||||
|  | 			); | ||||||
|  | 			outputPaths = ( | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 			shellPath = /bin/sh; | ||||||
|  | 			shellScript = "\n#!/bin/bash\nPATH=\"${PATH}:$FLUTTER_ROOT/bin:${PUB_CACHE}/bin:$HOME/.pub-cache/bin\"\n\nif [ -z \"$PODS_ROOT\" ] || [ ! -d \"$PODS_ROOT/FirebaseCrashlytics\" ]; then\n  # Cannot use \"BUILD_DIR%/Build/*\" as per Firebase documentation, it points to \"flutter-project/build/ios/*\" path which doesn't have run script\n  DERIVED_DATA_PATH=$(echo \"$BUILD_ROOT\" | sed -E 's|(.*DerivedData/[^/]+).*|\\1|')\n  PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT=\"${DERIVED_DATA_PATH}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\nelse\n  PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT=\"$PODS_ROOT/FirebaseCrashlytics/run\"\nfi\n\n# Command to upload symbols script used to upload symbols to Firebase server\nflutterfire upload-crashlytics-symbols --upload-symbols-script-path=\"$PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT\" --platform=ios --apple-project-path=\"${SRCROOT}\" --env-platform-name=\"${PLATFORM_NAME}\" --env-configuration=\"${CONFIGURATION}\" --env-project-dir=\"${PROJECT_DIR}\" --env-built-products-dir=\"${BUILT_PRODUCTS_DIR}\" --env-dwarf-dsym-folder-path=\"${DWARF_DSYM_FOLDER_PATH}\" --env-dwarf-dsym-file-name=\"${DWARF_DSYM_FILE_NAME}\" --env-infoplist-path=\"${INFOPLIST_PATH}\" --default-config=default\n"; | ||||||
|  | 		}; | ||||||
| 		E947029FCA058878F9B63890 /* [CP] Check Pods Manifest.lock */ = { | 		E947029FCA058878F9B63890 /* [CP] Check Pods Manifest.lock */ = { | ||||||
| 			isa = PBXShellScriptBuildPhase; | 			isa = PBXShellScriptBuildPhase; | ||||||
| 			buildActionMask = 2147483647; | 			buildActionMask = 2147483647; | ||||||
| @@ -643,6 +846,20 @@ | |||||||
| 			); | 			); | ||||||
| 			runOnlyForDeploymentPostprocessing = 0; | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
| 		}; | 		}; | ||||||
|  | 		7310A7D02EB10962002C0FD3 /* Sources */ = { | ||||||
|  | 			isa = PBXSourcesBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 		}; | ||||||
|  | 		73ACDFA72E3D0E6100B63535 /* Sources */ = { | ||||||
|  | 			isa = PBXSourcesBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 		}; | ||||||
| 		73C305CA2E0BE878009035B9 /* Sources */ = { | 		73C305CA2E0BE878009035B9 /* Sources */ = { | ||||||
| 			isa = PBXSourcesBuildPhase; | 			isa = PBXSourcesBuildPhase; | ||||||
| 			buildActionMask = 2147483647; | 			buildActionMask = 2147483647; | ||||||
| @@ -675,6 +892,11 @@ | |||||||
| 			target = 97C146ED1CF9000F007C117D /* Runner */; | 			target = 97C146ED1CF9000F007C117D /* Runner */; | ||||||
| 			targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; | 			targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; | ||||||
| 		}; | 		}; | ||||||
|  | 		73ACDFC22E3D0E6100B63535 /* PBXTargetDependency */ = { | ||||||
|  | 			isa = PBXTargetDependency; | ||||||
|  | 			target = 73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */; | ||||||
|  | 			targetProxy = 73ACDFC12E3D0E6100B63535 /* PBXContainerItemProxy */; | ||||||
|  | 		}; | ||||||
| 		73C305D72E0BE878009035B9 /* PBXTargetDependency */ = { | 		73C305D72E0BE878009035B9 /* PBXTargetDependency */ = { | ||||||
| 			isa = PBXTargetDependency; | 			isa = PBXTargetDependency; | ||||||
| 			target = 73C305CD2E0BE878009035B9 /* SolianShareExtension */; | 			target = 73C305CD2E0BE878009035B9 /* SolianShareExtension */; | ||||||
| @@ -750,7 +972,7 @@ | |||||||
| 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||||||
| 				GCC_WARN_UNUSED_FUNCTION = YES; | 				GCC_WARN_UNUSED_FUNCTION = YES; | ||||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 12.0; | 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | ||||||
| 				MTL_ENABLE_DEBUG_INFO = NO; | 				MTL_ENABLE_DEBUG_INFO = NO; | ||||||
| 				SDKROOT = iphoneos; | 				SDKROOT = iphoneos; | ||||||
| 				SUPPORTED_PLATFORMS = iphoneos; | 				SUPPORTED_PLATFORMS = iphoneos; | ||||||
| @@ -770,18 +992,23 @@ | |||||||
| 				CUSTOM_GROUP_ID = group.solsynth.solian; | 				CUSTOM_GROUP_ID = group.solsynth.solian; | ||||||
| 				DEVELOPMENT_TEAM = W7HPZ53V6B; | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
| 				ENABLE_BITCODE = NO; | 				ENABLE_BITCODE = NO; | ||||||
|  | 				EXCLUDED_SOURCE_FILE_NAMES = ""; | ||||||
| 				INFOPLIST_FILE = Runner/Info.plist; | 				INFOPLIST_FILE = Runner/Info.plist; | ||||||
| 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | 				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| 				); | 				); | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
|  | 				SWIFT_ENABLE_EXPLICIT_MODULES = "$(SWIFT_USE_INTEGRATED_DRIVER)"; | ||||||
| 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				VERSIONING_SYSTEM = "apple-generic"; | 				VERSIONING_SYSTEM = "apple-generic"; | ||||||
|  | 				WATCHOS_DEPLOYMENT_TARGET = 11.6; | ||||||
| 			}; | 			}; | ||||||
| 			name = Profile; | 			name = Profile; | ||||||
| 		}; | 		}; | ||||||
| @@ -789,13 +1016,17 @@ | |||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
| 			baseConfigurationReference = 14DFD79BE7C26E51B117583C /* Pods-RunnerTests.debug.xcconfig */; | 			baseConfigurationReference = 14DFD79BE7C26E51B117583C /* Pods-RunnerTests.debug.xcconfig */; | ||||||
| 			buildSettings = { | 			buildSettings = { | ||||||
|  | 				ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; | ||||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||||
| 				CODE_SIGN_STYLE = Automatic; | 				CODE_SIGN_STYLE = Automatic; | ||||||
| 				CURRENT_PROJECT_VERSION = 1; | 				CURRENT_PROJECT_VERSION = 1; | ||||||
| 				GENERATE_INFOPLIST_FILE = YES; | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				MARKETING_VERSION = 1.0; | 				MARKETING_VERSION = 1.0; | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
|  | 				SUPPORTS_MACCATALYST = YES; | ||||||
| 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; | 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; | ||||||
| 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| @@ -807,13 +1038,17 @@ | |||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
| 			baseConfigurationReference = 14118AC858B441AB16B7309E /* Pods-RunnerTests.release.xcconfig */; | 			baseConfigurationReference = 14118AC858B441AB16B7309E /* Pods-RunnerTests.release.xcconfig */; | ||||||
| 			buildSettings = { | 			buildSettings = { | ||||||
|  | 				ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; | ||||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||||
| 				CODE_SIGN_STYLE = Automatic; | 				CODE_SIGN_STYLE = Automatic; | ||||||
| 				CURRENT_PROJECT_VERSION = 1; | 				CURRENT_PROJECT_VERSION = 1; | ||||||
| 				GENERATE_INFOPLIST_FILE = YES; | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				MARKETING_VERSION = 1.0; | 				MARKETING_VERSION = 1.0; | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
|  | 				SUPPORTS_MACCATALYST = YES; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; | 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; | ||||||
| 			}; | 			}; | ||||||
| @@ -823,18 +1058,291 @@ | |||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
| 			baseConfigurationReference = E6B10A9A85BECA2E576C91FF /* Pods-RunnerTests.profile.xcconfig */; | 			baseConfigurationReference = E6B10A9A85BECA2E576C91FF /* Pods-RunnerTests.profile.xcconfig */; | ||||||
| 			buildSettings = { | 			buildSettings = { | ||||||
|  | 				ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; | ||||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||||
| 				CODE_SIGN_STYLE = Automatic; | 				CODE_SIGN_STYLE = Automatic; | ||||||
| 				CURRENT_PROJECT_VERSION = 1; | 				CURRENT_PROJECT_VERSION = 1; | ||||||
| 				GENERATE_INFOPLIST_FILE = YES; | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				MARKETING_VERSION = 1.0; | 				MARKETING_VERSION = 1.0; | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
|  | 				SUPPORTS_MACCATALYST = YES; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; | 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; | ||||||
| 			}; | 			}; | ||||||
| 			name = Profile; | 			name = Profile; | ||||||
| 		}; | 		}; | ||||||
|  | 		7310A7E02EB10963002C0FD3 /* Debug */ = { | ||||||
|  | 			isa = XCBuildConfiguration; | ||||||
|  | 			baseConfigurationReference = 86D60BA96DA647E1B11AA7F0 /* Pods-WatchRunner Watch App.debug.xcconfig */; | ||||||
|  | 			buildSettings = { | ||||||
|  | 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||||
|  | 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||||
|  | 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | ||||||
|  | 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||||
|  | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; | ||||||
|  | 				CLANG_ENABLE_OBJC_WEAK = YES; | ||||||
|  | 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||||
|  | 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||||||
|  | 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||||||
|  | 				CODE_SIGN_STYLE = Automatic; | ||||||
|  | 				CURRENT_PROJECT_VERSION = 1; | ||||||
|  | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
|  | 				ENABLE_PREVIEWS = YES; | ||||||
|  | 				ENABLE_USER_SCRIPT_SANDBOXING = NO; | ||||||
|  | 				GCC_C_LANGUAGE_STANDARD = gnu17; | ||||||
|  | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				INFOPLIST_FILE = "WatchRunner-Watch-App-Info.plist"; | ||||||
|  | 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | ||||||
|  | 				INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; | ||||||
|  | 				INFOPLIST_KEY_WKCompanionAppBundleIdentifier = dev.solsynth.solian; | ||||||
|  | 				INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = NO; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 18.6; | ||||||
|  | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
|  | 					"$(inherited)", | ||||||
|  | 					"@executable_path/Frameworks", | ||||||
|  | 				); | ||||||
|  | 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES; | ||||||
|  | 				MARKETING_VERSION = 1.0; | ||||||
|  | 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; | ||||||
|  | 				MTL_FAST_MATH = YES; | ||||||
|  | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.watchkitapp; | ||||||
|  | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SDKROOT = watchos; | ||||||
|  | 				SKIP_INSTALL = YES; | ||||||
|  | 				STRING_CATALOG_GENERATE_SYMBOLS = YES; | ||||||
|  | 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; | ||||||
|  | 				SWIFT_APPROACHABLE_CONCURRENCY = YES; | ||||||
|  | 				SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; | ||||||
|  | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||||||
|  | 				SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; | ||||||
|  | 				SWIFT_VERSION = 5.0; | ||||||
|  | 				TARGETED_DEVICE_FAMILY = 4; | ||||||
|  | 				WATCHOS_DEPLOYMENT_TARGET = 11.6; | ||||||
|  | 			}; | ||||||
|  | 			name = Debug; | ||||||
|  | 		}; | ||||||
|  | 		7310A7E12EB10963002C0FD3 /* Release */ = { | ||||||
|  | 			isa = XCBuildConfiguration; | ||||||
|  | 			baseConfigurationReference = A2EB1DAFDE9B8E6D88BBF7A3 /* Pods-WatchRunner Watch App.release.xcconfig */; | ||||||
|  | 			buildSettings = { | ||||||
|  | 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||||
|  | 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||||
|  | 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | ||||||
|  | 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||||
|  | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; | ||||||
|  | 				CLANG_ENABLE_OBJC_WEAK = YES; | ||||||
|  | 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||||
|  | 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||||||
|  | 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||||||
|  | 				CODE_SIGN_STYLE = Automatic; | ||||||
|  | 				CURRENT_PROJECT_VERSION = 1; | ||||||
|  | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
|  | 				ENABLE_PREVIEWS = YES; | ||||||
|  | 				ENABLE_USER_SCRIPT_SANDBOXING = NO; | ||||||
|  | 				GCC_C_LANGUAGE_STANDARD = gnu17; | ||||||
|  | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				INFOPLIST_FILE = "WatchRunner-Watch-App-Info.plist"; | ||||||
|  | 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | ||||||
|  | 				INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; | ||||||
|  | 				INFOPLIST_KEY_WKCompanionAppBundleIdentifier = dev.solsynth.solian; | ||||||
|  | 				INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = NO; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 18.6; | ||||||
|  | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
|  | 					"$(inherited)", | ||||||
|  | 					"@executable_path/Frameworks", | ||||||
|  | 				); | ||||||
|  | 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES; | ||||||
|  | 				MARKETING_VERSION = 1.0; | ||||||
|  | 				MTL_FAST_MATH = YES; | ||||||
|  | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.watchkitapp; | ||||||
|  | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SDKROOT = watchos; | ||||||
|  | 				SKIP_INSTALL = YES; | ||||||
|  | 				STRING_CATALOG_GENERATE_SYMBOLS = YES; | ||||||
|  | 				SUPPORTED_PLATFORMS = "watchsimulator watchos"; | ||||||
|  | 				SWIFT_APPROACHABLE_CONCURRENCY = YES; | ||||||
|  | 				SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; | ||||||
|  | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; | ||||||
|  | 				SWIFT_VERSION = 5.0; | ||||||
|  | 				TARGETED_DEVICE_FAMILY = 4; | ||||||
|  | 				WATCHOS_DEPLOYMENT_TARGET = 11.6; | ||||||
|  | 			}; | ||||||
|  | 			name = Release; | ||||||
|  | 		}; | ||||||
|  | 		7310A7E22EB10963002C0FD3 /* Profile */ = { | ||||||
|  | 			isa = XCBuildConfiguration; | ||||||
|  | 			baseConfigurationReference = 103EA2362B9E9F127016A1F1 /* Pods-WatchRunner Watch App.profile.xcconfig */; | ||||||
|  | 			buildSettings = { | ||||||
|  | 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||||
|  | 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||||
|  | 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | ||||||
|  | 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||||
|  | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; | ||||||
|  | 				CLANG_ENABLE_OBJC_WEAK = YES; | ||||||
|  | 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||||
|  | 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||||||
|  | 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||||||
|  | 				CODE_SIGN_STYLE = Automatic; | ||||||
|  | 				CURRENT_PROJECT_VERSION = 1; | ||||||
|  | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
|  | 				ENABLE_PREVIEWS = YES; | ||||||
|  | 				ENABLE_USER_SCRIPT_SANDBOXING = NO; | ||||||
|  | 				GCC_C_LANGUAGE_STANDARD = gnu17; | ||||||
|  | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				INFOPLIST_FILE = "WatchRunner-Watch-App-Info.plist"; | ||||||
|  | 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | ||||||
|  | 				INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; | ||||||
|  | 				INFOPLIST_KEY_WKCompanionAppBundleIdentifier = dev.solsynth.solian; | ||||||
|  | 				INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = NO; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 18.6; | ||||||
|  | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
|  | 					"$(inherited)", | ||||||
|  | 					"@executable_path/Frameworks", | ||||||
|  | 				); | ||||||
|  | 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES; | ||||||
|  | 				MARKETING_VERSION = 1.0; | ||||||
|  | 				MTL_FAST_MATH = YES; | ||||||
|  | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.watchkitapp; | ||||||
|  | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SDKROOT = watchos; | ||||||
|  | 				SKIP_INSTALL = YES; | ||||||
|  | 				STRING_CATALOG_GENERATE_SYMBOLS = YES; | ||||||
|  | 				SUPPORTED_PLATFORMS = "watchsimulator watchos"; | ||||||
|  | 				SWIFT_APPROACHABLE_CONCURRENCY = YES; | ||||||
|  | 				SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; | ||||||
|  | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; | ||||||
|  | 				SWIFT_VERSION = 5.0; | ||||||
|  | 				TARGETED_DEVICE_FAMILY = 4; | ||||||
|  | 				WATCHOS_DEPLOYMENT_TARGET = 11.6; | ||||||
|  | 			}; | ||||||
|  | 			name = Profile; | ||||||
|  | 		}; | ||||||
|  | 		73ACDFC42E3D0E6100B63535 /* Debug */ = { | ||||||
|  | 			isa = XCBuildConfiguration; | ||||||
|  | 			buildSettings = { | ||||||
|  | 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||||
|  | 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||||
|  | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; | ||||||
|  | 				CLANG_ENABLE_OBJC_WEAK = YES; | ||||||
|  | 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||||
|  | 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||||||
|  | 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||||||
|  | 				CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements; | ||||||
|  | 				CODE_SIGN_STYLE = Automatic; | ||||||
|  | 				CURRENT_PROJECT_VERSION = 1; | ||||||
|  | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
|  | 				ENABLE_USER_SCRIPT_SANDBOXING = YES; | ||||||
|  | 				GCC_C_LANGUAGE_STANDARD = gnu17; | ||||||
|  | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				INFOPLIST_FILE = SolianBroadcastExtension/Info.plist; | ||||||
|  | 				INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension; | ||||||
|  | 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
|  | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
|  | 					"$(inherited)", | ||||||
|  | 					"@executable_path/Frameworks", | ||||||
|  | 					"@executable_path/../../Frameworks", | ||||||
|  | 				); | ||||||
|  | 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES; | ||||||
|  | 				MARKETING_VERSION = 1.0; | ||||||
|  | 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; | ||||||
|  | 				MTL_FAST_MATH = YES; | ||||||
|  | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension; | ||||||
|  | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SKIP_INSTALL = YES; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
|  | 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; | ||||||
|  | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||||||
|  | 				SWIFT_VERSION = 5.0; | ||||||
|  | 				TARGETED_DEVICE_FAMILY = "1,2"; | ||||||
|  | 			}; | ||||||
|  | 			name = Debug; | ||||||
|  | 		}; | ||||||
|  | 		73ACDFC52E3D0E6100B63535 /* Release */ = { | ||||||
|  | 			isa = XCBuildConfiguration; | ||||||
|  | 			buildSettings = { | ||||||
|  | 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||||
|  | 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||||
|  | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; | ||||||
|  | 				CLANG_ENABLE_OBJC_WEAK = YES; | ||||||
|  | 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||||
|  | 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||||||
|  | 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||||||
|  | 				CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements; | ||||||
|  | 				CODE_SIGN_STYLE = Automatic; | ||||||
|  | 				CURRENT_PROJECT_VERSION = 1; | ||||||
|  | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
|  | 				ENABLE_USER_SCRIPT_SANDBOXING = YES; | ||||||
|  | 				GCC_C_LANGUAGE_STANDARD = gnu17; | ||||||
|  | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				INFOPLIST_FILE = SolianBroadcastExtension/Info.plist; | ||||||
|  | 				INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension; | ||||||
|  | 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
|  | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
|  | 					"$(inherited)", | ||||||
|  | 					"@executable_path/Frameworks", | ||||||
|  | 					"@executable_path/../../Frameworks", | ||||||
|  | 				); | ||||||
|  | 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES; | ||||||
|  | 				MARKETING_VERSION = 1.0; | ||||||
|  | 				MTL_FAST_MATH = YES; | ||||||
|  | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension; | ||||||
|  | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SKIP_INSTALL = YES; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
|  | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_VERSION = 5.0; | ||||||
|  | 				TARGETED_DEVICE_FAMILY = "1,2"; | ||||||
|  | 			}; | ||||||
|  | 			name = Release; | ||||||
|  | 		}; | ||||||
|  | 		73ACDFC62E3D0E6100B63535 /* Profile */ = { | ||||||
|  | 			isa = XCBuildConfiguration; | ||||||
|  | 			buildSettings = { | ||||||
|  | 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||||
|  | 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||||
|  | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; | ||||||
|  | 				CLANG_ENABLE_OBJC_WEAK = YES; | ||||||
|  | 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||||
|  | 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||||||
|  | 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||||||
|  | 				CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements; | ||||||
|  | 				CODE_SIGN_STYLE = Automatic; | ||||||
|  | 				CURRENT_PROJECT_VERSION = 1; | ||||||
|  | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
|  | 				ENABLE_USER_SCRIPT_SANDBOXING = YES; | ||||||
|  | 				GCC_C_LANGUAGE_STANDARD = gnu17; | ||||||
|  | 				GENERATE_INFOPLIST_FILE = YES; | ||||||
|  | 				INFOPLIST_FILE = SolianBroadcastExtension/Info.plist; | ||||||
|  | 				INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension; | ||||||
|  | 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
|  | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
|  | 					"$(inherited)", | ||||||
|  | 					"@executable_path/Frameworks", | ||||||
|  | 					"@executable_path/../../Frameworks", | ||||||
|  | 				); | ||||||
|  | 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES; | ||||||
|  | 				MARKETING_VERSION = 1.0; | ||||||
|  | 				MTL_FAST_MATH = YES; | ||||||
|  | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension; | ||||||
|  | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SKIP_INSTALL = YES; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
|  | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_VERSION = 5.0; | ||||||
|  | 				TARGETED_DEVICE_FAMILY = "1,2"; | ||||||
|  | 			}; | ||||||
|  | 			name = Profile; | ||||||
|  | 		}; | ||||||
| 		73C305D92E0BE878009035B9 /* Debug */ = { | 		73C305D92E0BE878009035B9 /* Debug */ = { | ||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
| 			baseConfigurationReference = 17FAB080A9C53193ABD9C15B /* Pods-SolianShareExtension.debug.xcconfig */; | 			baseConfigurationReference = 17FAB080A9C53193ABD9C15B /* Pods-SolianShareExtension.debug.xcconfig */; | ||||||
| @@ -857,7 +1365,7 @@ | |||||||
| 				INFOPLIST_FILE = SolianShareExtension/Info.plist; | 				INFOPLIST_FILE = SolianShareExtension/Info.plist; | ||||||
| 				INFOPLIST_KEY_CFBundleDisplayName = SolianShareExtension; | 				INFOPLIST_KEY_CFBundleDisplayName = SolianShareExtension; | ||||||
| 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| @@ -870,8 +1378,10 @@ | |||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianShareExtension; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianShareExtension; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
| 				SKIP_INSTALL = YES; | 				SKIP_INSTALL = YES; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
| 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; | 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; | ||||||
| 				SWIFT_EMIT_LOC_STRINGS = YES; | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_ENABLE_EXPLICIT_MODULES = NO; | ||||||
| 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				TARGETED_DEVICE_FAMILY = "1,2"; | 				TARGETED_DEVICE_FAMILY = "1,2"; | ||||||
| @@ -900,7 +1410,7 @@ | |||||||
| 				INFOPLIST_FILE = SolianShareExtension/Info.plist; | 				INFOPLIST_FILE = SolianShareExtension/Info.plist; | ||||||
| 				INFOPLIST_KEY_CFBundleDisplayName = SolianShareExtension; | 				INFOPLIST_KEY_CFBundleDisplayName = SolianShareExtension; | ||||||
| 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| @@ -912,7 +1422,9 @@ | |||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianShareExtension; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianShareExtension; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
| 				SKIP_INSTALL = YES; | 				SKIP_INSTALL = YES; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
| 				SWIFT_EMIT_LOC_STRINGS = YES; | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_ENABLE_EXPLICIT_MODULES = NO; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				TARGETED_DEVICE_FAMILY = "1,2"; | 				TARGETED_DEVICE_FAMILY = "1,2"; | ||||||
| 			}; | 			}; | ||||||
| @@ -940,7 +1452,7 @@ | |||||||
| 				INFOPLIST_FILE = SolianShareExtension/Info.plist; | 				INFOPLIST_FILE = SolianShareExtension/Info.plist; | ||||||
| 				INFOPLIST_KEY_CFBundleDisplayName = SolianShareExtension; | 				INFOPLIST_KEY_CFBundleDisplayName = SolianShareExtension; | ||||||
| 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | 				INFOPLIST_KEY_NSHumanReadableCopyright = ""; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| @@ -952,7 +1464,9 @@ | |||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianShareExtension; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianShareExtension; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
| 				SKIP_INSTALL = YES; | 				SKIP_INSTALL = YES; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
| 				SWIFT_EMIT_LOC_STRINGS = YES; | 				SWIFT_EMIT_LOC_STRINGS = YES; | ||||||
|  | 				SWIFT_ENABLE_EXPLICIT_MODULES = NO; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				TARGETED_DEVICE_FAMILY = "1,2"; | 				TARGETED_DEVICE_FAMILY = "1,2"; | ||||||
| 			}; | 			}; | ||||||
| @@ -1127,7 +1641,7 @@ | |||||||
| 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||||||
| 				GCC_WARN_UNUSED_FUNCTION = YES; | 				GCC_WARN_UNUSED_FUNCTION = YES; | ||||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 12.0; | 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | ||||||
| 				MTL_ENABLE_DEBUG_INFO = YES; | 				MTL_ENABLE_DEBUG_INFO = YES; | ||||||
| 				ONLY_ACTIVE_ARCH = YES; | 				ONLY_ACTIVE_ARCH = YES; | ||||||
| 				SDKROOT = iphoneos; | 				SDKROOT = iphoneos; | ||||||
| @@ -1178,7 +1692,7 @@ | |||||||
| 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||||||
| 				GCC_WARN_UNUSED_FUNCTION = YES; | 				GCC_WARN_UNUSED_FUNCTION = YES; | ||||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 12.0; | 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | ||||||
| 				MTL_ENABLE_DEBUG_INFO = NO; | 				MTL_ENABLE_DEBUG_INFO = NO; | ||||||
| 				SDKROOT = iphoneos; | 				SDKROOT = iphoneos; | ||||||
| 				SUPPORTED_PLATFORMS = iphoneos; | 				SUPPORTED_PLATFORMS = iphoneos; | ||||||
| @@ -1200,19 +1714,23 @@ | |||||||
| 				CUSTOM_GROUP_ID = group.solsynth.solian; | 				CUSTOM_GROUP_ID = group.solsynth.solian; | ||||||
| 				DEVELOPMENT_TEAM = W7HPZ53V6B; | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
| 				ENABLE_BITCODE = NO; | 				ENABLE_BITCODE = NO; | ||||||
|  | 				EXCLUDED_SOURCE_FILE_NAMES = ""; | ||||||
| 				INFOPLIST_FILE = Runner/Info.plist; | 				INFOPLIST_FILE = Runner/Info.plist; | ||||||
| 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | 				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| 				); | 				); | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SWIFT_ENABLE_EXPLICIT_MODULES = "$(SWIFT_USE_INTEGRATED_DRIVER)"; | ||||||
| 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||||||
| 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				VERSIONING_SYSTEM = "apple-generic"; | 				VERSIONING_SYSTEM = "apple-generic"; | ||||||
|  | 				WATCHOS_DEPLOYMENT_TARGET = 11.6; | ||||||
| 			}; | 			}; | ||||||
| 			name = Debug; | 			name = Debug; | ||||||
| 		}; | 		}; | ||||||
| @@ -1227,18 +1745,24 @@ | |||||||
| 				CUSTOM_GROUP_ID = group.solsynth.solian; | 				CUSTOM_GROUP_ID = group.solsynth.solian; | ||||||
| 				DEVELOPMENT_TEAM = W7HPZ53V6B; | 				DEVELOPMENT_TEAM = W7HPZ53V6B; | ||||||
| 				ENABLE_BITCODE = NO; | 				ENABLE_BITCODE = NO; | ||||||
|  | 				EXCLUDED_SOURCE_FILE_NAMES = ""; | ||||||
| 				INFOPLIST_FILE = Runner/Info.plist; | 				INFOPLIST_FILE = Runner/Info.plist; | ||||||
| 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | 				INFOPLIST_KEY_CFBundleDisplayName = Solian; | ||||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 13.0; | 				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; | ||||||
|  | 				IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | 				LD_RUNPATH_SEARCH_PATHS = ( | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| 				); | 				); | ||||||
|  | 				ONLY_ACTIVE_ARCH = NO; | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian; | 				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
|  | 				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; | ||||||
|  | 				SWIFT_ENABLE_EXPLICIT_MODULES = "$(SWIFT_USE_INTEGRATED_DRIVER)"; | ||||||
| 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				VERSIONING_SYSTEM = "apple-generic"; | 				VERSIONING_SYSTEM = "apple-generic"; | ||||||
|  | 				WATCHOS_DEPLOYMENT_TARGET = 11.6; | ||||||
| 			}; | 			}; | ||||||
| 			name = Release; | 			name = Release; | ||||||
| 		}; | 		}; | ||||||
| @@ -1255,6 +1779,26 @@ | |||||||
| 			defaultConfigurationIsVisible = 0; | 			defaultConfigurationIsVisible = 0; | ||||||
| 			defaultConfigurationName = Release; | 			defaultConfigurationName = Release; | ||||||
| 		}; | 		}; | ||||||
|  | 		7310A7E32EB10963002C0FD3 /* Build configuration list for PBXNativeTarget "WatchRunner Watch App" */ = { | ||||||
|  | 			isa = XCConfigurationList; | ||||||
|  | 			buildConfigurations = ( | ||||||
|  | 				7310A7E02EB10963002C0FD3 /* Debug */, | ||||||
|  | 				7310A7E12EB10963002C0FD3 /* Release */, | ||||||
|  | 				7310A7E22EB10963002C0FD3 /* Profile */, | ||||||
|  | 			); | ||||||
|  | 			defaultConfigurationIsVisible = 0; | ||||||
|  | 			defaultConfigurationName = Release; | ||||||
|  | 		}; | ||||||
|  | 		73ACDFCB2E3D0E6100B63535 /* Build configuration list for PBXNativeTarget "SolianBroadcastExtension" */ = { | ||||||
|  | 			isa = XCConfigurationList; | ||||||
|  | 			buildConfigurations = ( | ||||||
|  | 				73ACDFC42E3D0E6100B63535 /* Debug */, | ||||||
|  | 				73ACDFC52E3D0E6100B63535 /* Release */, | ||||||
|  | 				73ACDFC62E3D0E6100B63535 /* Profile */, | ||||||
|  | 			); | ||||||
|  | 			defaultConfigurationIsVisible = 0; | ||||||
|  | 			defaultConfigurationName = Release; | ||||||
|  | 		}; | ||||||
| 		73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */ = { | 		73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */ = { | ||||||
| 			isa = XCConfigurationList; | 			isa = XCConfigurationList; | ||||||
| 			buildConfigurations = ( | 			buildConfigurations = ( | ||||||
|   | |||||||
| @@ -20,6 +20,20 @@ | |||||||
|                ReferencedContainer = "container:Runner.xcodeproj"> |                ReferencedContainer = "container:Runner.xcodeproj"> | ||||||
|             </BuildableReference> |             </BuildableReference> | ||||||
|          </BuildActionEntry> |          </BuildActionEntry> | ||||||
|  |          <BuildActionEntry | ||||||
|  |             buildForTesting = "YES" | ||||||
|  |             buildForRunning = "YES" | ||||||
|  |             buildForProfiling = "YES" | ||||||
|  |             buildForArchiving = "YES" | ||||||
|  |             buildForAnalyzing = "YES"> | ||||||
|  |             <BuildableReference | ||||||
|  |                BuildableIdentifier = "primary" | ||||||
|  |                BlueprintIdentifier = "7310A7D32EB10962002C0FD3" | ||||||
|  |                BuildableName = "WatchRunner Watch App.app" | ||||||
|  |                BlueprintName = "WatchRunner Watch App" | ||||||
|  |                ReferencedContainer = "container:Runner.xcodeproj"> | ||||||
|  |             </BuildableReference> | ||||||
|  |          </BuildActionEntry> | ||||||
|       </BuildActionEntries> |       </BuildActionEntries> | ||||||
|    </BuildAction> |    </BuildAction> | ||||||
|    <TestAction |    <TestAction | ||||||
|   | |||||||
| @@ -1,9 +1,11 @@ | |||||||
| import Flutter | import Flutter | ||||||
| import UIKit | import UIKit | ||||||
|  | import WatchConnectivity | ||||||
|  |  | ||||||
| @main | @main | ||||||
| @objc class AppDelegate: FlutterAppDelegate { | @objc class AppDelegate: FlutterAppDelegate { | ||||||
|     let notifyDelegate = NotifyDelegate() |     let notifyDelegate = NotifyDelegate() | ||||||
|  |     private static var sharedWatchConnectivityService: WatchConnectivityService? | ||||||
|  |  | ||||||
|     override func application( |     override func application( | ||||||
|         _ application: UIApplication, |         _ application: UIApplication, | ||||||
| @@ -12,7 +14,7 @@ import UIKit | |||||||
|         UNUserNotificationCenter.current().delegate = notifyDelegate |         UNUserNotificationCenter.current().delegate = notifyDelegate | ||||||
|  |  | ||||||
|         let replyableMessageCategory = UNNotificationCategory( |         let replyableMessageCategory = UNNotificationCategory( | ||||||
|             identifier: "REPLYABLE_MESSAGE", |             identifier: "CHAT_MESSAGE", | ||||||
|             actions: [ |             actions: [ | ||||||
|                 UNTextInputNotificationAction( |                 UNTextInputNotificationAction( | ||||||
|                     identifier: "reply_action", |                     identifier: "reply_action", | ||||||
| @@ -23,10 +25,85 @@ import UIKit | |||||||
|             intentIdentifiers: [], |             intentIdentifiers: [], | ||||||
|             options: [] |             options: [] | ||||||
|         ) |         ) | ||||||
|          |  | ||||||
|         UNUserNotificationCenter.current().setNotificationCategories([replyableMessageCategory]) |         UNUserNotificationCenter.current().setNotificationCategories([replyableMessageCategory]) | ||||||
|          |          | ||||||
|         GeneratedPluginRegistrant.register(with: self) |         GeneratedPluginRegistrant.register(with: self) | ||||||
|  |          | ||||||
|  |         // Always initialize and retain a strong reference | ||||||
|  |         if WCSession.isSupported() { | ||||||
|  |             AppDelegate.sharedWatchConnectivityService = WatchConnectivityService.shared | ||||||
|  |         } else { | ||||||
|  |             print("[iOS] WCSession not supported on this device.") | ||||||
|  |         } | ||||||
|  |          | ||||||
|         return super.application(application, didFinishLaunchingWithOptions: launchOptions) |         return super.application(application, didFinishLaunchingWithOptions: launchOptions) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | final class WatchConnectivityService: NSObject, WCSessionDelegate { | ||||||
|  |     static let shared = WatchConnectivityService() | ||||||
|  |     private let session: WCSession = .default | ||||||
|  |      | ||||||
|  |     private override init() { | ||||||
|  |         super.init() | ||||||
|  |         print("[iOS] Activating WCSession...") | ||||||
|  |         session.delegate = self | ||||||
|  |         session.activate() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // MARK: - WCSessionDelegate | ||||||
|  |  | ||||||
|  |     func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { | ||||||
|  |         if let error = error { | ||||||
|  |             print("[iOS] WCSession activation failed: \(error.localizedDescription)") | ||||||
|  |         } else { | ||||||
|  |             print("[iOS] WCSession activated with state: \(activationState.rawValue)") | ||||||
|  |             if activationState == .activated { | ||||||
|  |                 sendDataToWatch() | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func sessionDidBecomeInactive(_ session: WCSession) {} | ||||||
|  |      | ||||||
|  |     func sessionDidDeactivate(_ session: WCSession) { | ||||||
|  |         session.activate() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { | ||||||
|  |         print("[iOS] Received message: \(message)") | ||||||
|  |         if let request = message["request"] as? String, request == "data" { | ||||||
|  |             let token = UserDefaults.standard.getFlutterToken() | ||||||
|  |             let serverUrl = UserDefaults.standard.getServerUrl() | ||||||
|  |              | ||||||
|  |             var data: [String: Any] = ["serverUrl": serverUrl ?? ""] | ||||||
|  |             if let token = token { | ||||||
|  |                 data["token"] = token | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             print("[iOS] Replying with data: \(data)") | ||||||
|  |             replyHandler(data) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func sendDataToWatch() { | ||||||
|  |         guard session.activationState == .activated else { | ||||||
|  |             return | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         let token = UserDefaults.standard.getFlutterToken() | ||||||
|  |         let serverUrl = UserDefaults.standard.getServerUrl() | ||||||
|  |          | ||||||
|  |         var data: [String: Any] = ["serverUrl": serverUrl ?? ""] | ||||||
|  |         if let token = token { | ||||||
|  |             data["token"] = token | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         do { | ||||||
|  |             try session.updateApplicationContext(data) | ||||||
|  |             print("[iOS] Sent application context: \(data)") | ||||||
|  |         } catch { | ||||||
|  |             print("[iOS] Failed to send application context: \(error.localizedDescription)") | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -1 +1,334 @@ | |||||||
| {"images":[{"size":"20x20","idiom":"universal","filename":"Icon-App-20x20@2x.png","scale":"2x","platform":"ios"},{"size":"20x20","idiom":"universal","filename":"Icon-App-20x20@3x.png","scale":"3x","platform":"ios"},{"size":"29x29","idiom":"universal","filename":"Icon-App-29x29@2x.png","scale":"2x","platform":"ios"},{"size":"29x29","idiom":"universal","filename":"Icon-App-29x29@3x.png","scale":"3x","platform":"ios"},{"size":"38x38","idiom":"universal","filename":"Icon-App-38x38@2x.png","scale":"2x","platform":"ios"},{"size":"38x38","idiom":"universal","filename":"Icon-App-38x38@3x.png","scale":"3x","platform":"ios"},{"size":"40x40","idiom":"universal","filename":"Icon-App-40x40@2x.png","scale":"2x","platform":"ios"},{"size":"40x40","idiom":"universal","filename":"Icon-App-40x40@3x.png","scale":"3x","platform":"ios"},{"size":"60x60","idiom":"universal","filename":"Icon-App-60x60@2x.png","scale":"2x","platform":"ios"},{"size":"60x60","idiom":"universal","filename":"Icon-App-60x60@3x.png","scale":"3x","platform":"ios"},{"size":"64x64","idiom":"universal","filename":"Icon-App-64x64@2x.png","scale":"2x","platform":"ios"},{"size":"64x64","idiom":"universal","filename":"Icon-App-64x64@3x.png","scale":"3x","platform":"ios"},{"size":"68x68","idiom":"universal","filename":"Icon-App-68x68@2x.png","scale":"2x","platform":"ios"},{"size":"76x76","idiom":"universal","filename":"Icon-App-76x76@2x.png","scale":"2x","platform":"ios"},{"size":"83.5x83.5","idiom":"universal","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x","platform":"ios"},{"size":"1024x1024","idiom":"universal","filename":"Icon-App-1024x1024@1x.png","scale":"1x","platform":"ios"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"},{"size":"20x20","idiom":"universal","filename":"Icon-App-Dark-20x20@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"20x20","idiom":"universal","filename":"Icon-App-Dark-20x20@3x.png","scale":"3x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"29x29","idiom":"universal","filename":"Icon-App-Dark-29x29@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"29x29","idiom":"universal","filename":"Icon-App-Dark-29x29@3x.png","scale":"3x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"38x38","idiom":"universal","filename":"Icon-App-Dark-38x38@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"38x38","idiom":"universal","filename":"Icon-App-Dark-38x38@3x.png","scale":"3x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"40x40","idiom":"universal","filename":"Icon-App-Dark-40x40@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"40x40","idiom":"universal","filename":"Icon-App-Dark-40x40@3x.png","scale":"3x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"60x60","idiom":"universal","filename":"Icon-App-Dark-60x60@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"60x60","idiom":"universal","filename":"Icon-App-Dark-60x60@3x.png","scale":"3x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"64x64","idiom":"universal","filename":"Icon-App-Dark-64x64@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"64x64","idiom":"universal","filename":"Icon-App-Dark-64x64@3x.png","scale":"3x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"68x68","idiom":"universal","filename":"Icon-App-Dark-68x68@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"76x76","idiom":"universal","filename":"Icon-App-Dark-76x76@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"83.5x83.5","idiom":"universal","filename":"Icon-App-Dark-83.5x83.5@2x.png","scale":"2x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]},{"size":"1024x1024","idiom":"universal","filename":"Icon-App-Dark-1024x1024@1x.png","scale":"1x","platform":"ios","appearances":[{"appearance":"luminosity","value":"dark"}]}],"info":{"version":1,"author":"xcode"}} | { | ||||||
|  |   "images" : [ | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-20x20@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "20x20" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-20x20@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "20x20" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-29x29@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "29x29" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-29x29@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "29x29" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-38x38@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "38x38" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-38x38@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "38x38" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-40x40@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "40x40" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-40x40@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "40x40" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-60x60@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "60x60" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-60x60@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "60x60" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-64x64@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "64x64" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-64x64@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "64x64" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-68x68@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "68x68" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-76x76@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "76x76" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-83.5x83.5@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "83.5x83.5" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-1024x1024@1x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "1x", | ||||||
|  |       "size" : "1024x1024" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-20x20@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "20x20" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-20x20@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "20x20" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-29x29@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "29x29" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-29x29@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "29x29" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-38x38@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "38x38" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-38x38@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "38x38" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-40x40@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "40x40" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-40x40@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "40x40" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-60x60@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "60x60" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-60x60@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "60x60" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-64x64@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "64x64" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-64x64@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "64x64" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-68x68@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "68x68" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-76x76@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "76x76" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-83.5x83.5@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "83.5x83.5" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "appearances" : [ | ||||||
|  |         { | ||||||
|  |           "appearance" : "luminosity", | ||||||
|  |           "value" : "dark" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "filename" : "Icon-App-Dark-1024x1024@1x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "1x", | ||||||
|  |       "size" : "1024x1024" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "Icon-App-1024x1024@1x.png", | ||||||
|  |       "idiom" : "ios-marketing", | ||||||
|  |       "scale" : "1x", | ||||||
|  |       "size" : "1024x1024" | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "info" : { | ||||||
|  |     "author" : "xcode", | ||||||
|  |     "version" : 1 | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| Before Width: | Height: | Size: 295 B | 
| Before Width: | Height: | Size: 282 B | 
| Before Width: | Height: | Size: 406 B | 
| Before Width: | Height: | Size: 762 B | 
| @@ -1,8 +1,10 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r"> | <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> | ||||||
|  |     <device id="retina6_12" orientation="portrait" appearance="light"/> | ||||||
|     <dependencies> |     <dependencies> | ||||||
|         <deployment identifier="iOS"/> |         <deployment identifier="iOS"/> | ||||||
|         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/> |         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/> | ||||||
|  |         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||||||
|     </dependencies> |     </dependencies> | ||||||
|     <scenes> |     <scenes> | ||||||
|         <!--Flutter View Controller--> |         <!--Flutter View Controller--> | ||||||
| @@ -14,13 +16,14 @@ | |||||||
|                         <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> |                         <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> | ||||||
|                     </layoutGuides> |                     </layoutGuides> | ||||||
|                     <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> |                     <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> | ||||||
|                         <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> |                         <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> | ||||||
|                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||||||
|                         <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> |                         <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | ||||||
|                     </view> |                     </view> | ||||||
|                 </viewController> |                 </viewController> | ||||||
|                 <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> |                 <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> | ||||||
|             </objects> |             </objects> | ||||||
|  |             <point key="canvasLocation" x="-26" y="-76"/> | ||||||
|         </scene> |         </scene> | ||||||
|     </scenes> |     </scenes> | ||||||
| </document> | </document> | ||||||
|   | |||||||
| @@ -2,6 +2,12 @@ | |||||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||||
| <plist version="1.0"> | <plist version="1.0"> | ||||||
| <dict> | <dict> | ||||||
|  | 	<key>CLIENT_ID</key> | ||||||
|  | 	<string>961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com</string> | ||||||
|  | 	<key>REVERSED_CLIENT_ID</key> | ||||||
|  | 	<string>com.googleusercontent.apps.961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig</string> | ||||||
|  | 	<key>ANDROID_CLIENT_ID</key> | ||||||
|  | 	<string>961776991058-r4iv9qoio57ul7utbfpgfrda2etvtch8.apps.googleusercontent.com</string> | ||||||
| 	<key>API_KEY</key> | 	<key>API_KEY</key> | ||||||
| 	<string>AIzaSyCzQIyiYKoYHTpGXhN-IjgMML8z797WVD8</string> | 	<string>AIzaSyCzQIyiYKoYHTpGXhN-IjgMML8z797WVD8</string> | ||||||
| 	<key>GCM_SENDER_ID</key> | 	<key>GCM_SENDER_ID</key> | ||||||
|   | |||||||
| @@ -2,16 +2,10 @@ | |||||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||||
| <plist version="1.0"> | <plist version="1.0"> | ||||||
| <dict> | <dict> | ||||||
| 	<key>CLIENT_ID</key> | 	<key>AppGroupId</key> | ||||||
| 	<string>961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com</string> | 	<string>$(CUSTOM_GROUP_ID)</string> | ||||||
| 	<key>REVERSED_CLIENT_ID</key> |  | ||||||
| 	<string>com.googleusercontent.apps.961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig</string> |  | ||||||
| 	<key>PLIST_VERSION</key> |  | ||||||
| 	<string>1</string> |  | ||||||
| 	<key>BUNDLE_ID</key> | 	<key>BUNDLE_ID</key> | ||||||
| 	<string>dev.solsynth.solian</string> | 	<string>dev.solsynth.solian</string> | ||||||
| 	<key>ITSAppUsesNonExemptEncryption</key> |  | ||||||
| 	<false/> |  | ||||||
| 	<key>CADisableMinimumFrameDurationOnPhone</key> | 	<key>CADisableMinimumFrameDurationOnPhone</key> | ||||||
| 	<true/> | 	<true/> | ||||||
| 	<key>CFBundleDevelopmentRegion</key> | 	<key>CFBundleDevelopmentRegion</key> | ||||||
| @@ -32,31 +26,54 @@ | |||||||
| 	<string>$(FLUTTER_BUILD_NAME)</string> | 	<string>$(FLUTTER_BUILD_NAME)</string> | ||||||
| 	<key>CFBundleSignature</key> | 	<key>CFBundleSignature</key> | ||||||
| 	<string>????</string> | 	<string>????</string> | ||||||
|  | 	<key>CFBundleURLTypes</key> | ||||||
|  | 	<array> | ||||||
|  | 		<dict> | ||||||
|  | 			<key>CFBundleTypeRole</key> | ||||||
|  | 			<string>Editor</string> | ||||||
|  | 			<key>CFBundleURLSchemes</key> | ||||||
|  | 			<array> | ||||||
|  | 				<string>ShareMedia-$(PRODUCT_BUNDLE_IDENTIFIER)</string> | ||||||
|  | 			</array> | ||||||
|  | 		</dict> | ||||||
|  | 		<dict> | ||||||
|  | 			<key>CFBundleTypeRole</key> | ||||||
|  | 			<string>Viewer</string> | ||||||
|  | 			<key>CFBundleURLSchemes</key> | ||||||
|  | 			<array> | ||||||
|  | 				<string>solian</string> | ||||||
|  | 			</array> | ||||||
|  | 		</dict> | ||||||
|  | 	</array> | ||||||
| 	<key>CFBundleVersion</key> | 	<key>CFBundleVersion</key> | ||||||
| 	<string>$(FLUTTER_BUILD_NUMBER)</string> | 	<string>$(FLUTTER_BUILD_NUMBER)</string> | ||||||
|     <key>CFBundleURLTypes</key> | 	<key>CLIENT_ID</key> | ||||||
|     <array> | 	<string>961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com</string> | ||||||
|         <dict> | 	<key>ITSAppUsesNonExemptEncryption</key> | ||||||
|             <key>CFBundleTypeRole</key> | 	<false/> | ||||||
|             <string>Editor</string> |  | ||||||
|             <key>CFBundleURLSchemes</key> |  | ||||||
|             <array> |  | ||||||
|                 <string>ShareMedia-$(PRODUCT_BUNDLE_IDENTIFIER)</string> |  | ||||||
|             </array> |  | ||||||
|         </dict> |  | ||||||
|     </array> |  | ||||||
| 	<key>LSRequiresIPhoneOS</key> | 	<key>LSRequiresIPhoneOS</key> | ||||||
| 	<true/> | 	<true/> | ||||||
| 	<key>NSCalendarsUsageDescription</key> | 	<key>NSCalendarsUsageDescription</key> | ||||||
| 	<string>Grant access to Calander help us to shows Solar Calander with your own events.</string> | 	<string>Grant access to Calander help us to shows Solar Calander with your own events.</string> | ||||||
| 	<key>NSCameraUsageDescription</key> | 	<key>NSCameraUsageDescription</key> | ||||||
| 	<string>Grant access to Camera will allow Solian take photo or video for your post.</string> | 	<string>Grant access to Camera will allow Solian take photo or video for your post.</string> | ||||||
|  | 	<key>NSFaceIDUsageDescription</key> | ||||||
|  | 	<string>Allow the Solar Network verify your ownership of the logged in account and continue your action quickly.</string> | ||||||
| 	<key>NSMicrophoneUsageDescription</key> | 	<key>NSMicrophoneUsageDescription</key> | ||||||
| 	<string>Grant access to Microphone will allow Solian record audio for your post.</string> | 	<string>Grant access to Microphone will allow Solian record audio for your post.</string> | ||||||
| 	<key>NSPhotoLibraryAddUsageDescription</key> | 	<key>NSPhotoLibraryAddUsageDescription</key> | ||||||
| 	<string>Grant access to Photo Library will allow Solian download photo to album for you.</string> | 	<string>Grant access to Photo Library will allow Solian download photo to album for you.</string> | ||||||
| 	<key>NSPhotoLibraryUsageDescription</key> | 	<key>NSPhotoLibraryUsageDescription</key> | ||||||
| 	<string>Grant access to Photo Library will allow Solian upload photo or video for your post.</string> | 	<string>Grant access to Photo Library will allow Solian upload photo or video for your post.</string> | ||||||
|  | 	<key>NSUserActivityTypes</key> | ||||||
|  | 	<array> | ||||||
|  | 		<string>INStartCallIntent</string> | ||||||
|  | 		<string>INSendMessageIntent</string> | ||||||
|  | 	</array> | ||||||
|  | 	<key>PLIST_VERSION</key> | ||||||
|  | 	<string>1</string> | ||||||
|  | 	<key>REVERSED_CLIENT_ID</key> | ||||||
|  | 	<string>com.googleusercontent.apps.961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig</string> | ||||||
| 	<key>UIApplicationSupportsIndirectInputEvents</key> | 	<key>UIApplicationSupportsIndirectInputEvents</key> | ||||||
| 	<true/> | 	<true/> | ||||||
| 	<key>UIBackgroundModes</key> | 	<key>UIBackgroundModes</key> | ||||||
| @@ -74,25 +91,18 @@ | |||||||
| 	<false/> | 	<false/> | ||||||
| 	<key>UISupportedInterfaceOrientations</key> | 	<key>UISupportedInterfaceOrientations</key> | ||||||
| 	<array> | 	<array> | ||||||
| 		<string>UIInterfaceOrientationPortrait</string> |  | ||||||
| 		<string>UIInterfaceOrientationLandscapeLeft</string> | 		<string>UIInterfaceOrientationLandscapeLeft</string> | ||||||
| 		<string>UIInterfaceOrientationLandscapeRight</string> | 		<string>UIInterfaceOrientationLandscapeRight</string> | ||||||
|  | 		<string>UIInterfaceOrientationPortrait</string> | ||||||
| 	</array> | 	</array> | ||||||
|  | 	<key>WKCompanionAppBundleIdentifier</key> | ||||||
|  | 	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | ||||||
| 	<key>UISupportedInterfaceOrientations~ipad</key> | 	<key>UISupportedInterfaceOrientations~ipad</key> | ||||||
| 	<array> | 	<array> | ||||||
| 		<string>UIInterfaceOrientationPortrait</string> |  | ||||||
| 		<string>UIInterfaceOrientationPortraitUpsideDown</string> |  | ||||||
| 		<string>UIInterfaceOrientationLandscapeLeft</string> | 		<string>UIInterfaceOrientationLandscapeLeft</string> | ||||||
| 		<string>UIInterfaceOrientationLandscapeRight</string> | 		<string>UIInterfaceOrientationLandscapeRight</string> | ||||||
| 	</array> | 		<string>UIInterfaceOrientationPortrait</string> | ||||||
| 	<key>NSFaceIDUsageDescription</key> | 		<string>UIInterfaceOrientationPortraitUpsideDown</string> | ||||||
| 	<string>Allow the Solar Network verify your ownership of the logged in account and continue your action quickly.</string> |  | ||||||
| 	<key>AppGroupId</key> |  | ||||||
| 	<string>$(CUSTOM_GROUP_ID)</string> |  | ||||||
| 	<key>NSUserActivityTypes</key> |  | ||||||
| 	<array> |  | ||||||
| 		<string>INStartCallIntent</string> |  | ||||||
| 		<string>INSendMessageIntent</string> |  | ||||||
| 	</array> | 	</array> | ||||||
| </dict> | </dict> | ||||||
| </plist> | </plist> | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ class NotifyDelegate: UIResponder, UNUserNotificationCenterDelegate { | |||||||
|         } |         } | ||||||
|          |          | ||||||
|         let serverUrl = UserDefaults.standard.getServerUrl() |         let serverUrl = UserDefaults.standard.getServerUrl() | ||||||
|         let url = "\(serverUrl)/chat/\(metadata["room_id"] ?? "")/messages" |         let url = "\(serverUrl)/sphere/chat/\(metadata["room_id"] ?? "")/messages" | ||||||
|          |          | ||||||
|         let parameters: [String: Any?] = [ |         let parameters: [String: Any?] = [ | ||||||
|             "content": textResponse.userText, |             "content": textResponse.userText, | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| import Foundation | import Foundation | ||||||
|  |  | ||||||
| func getAttachmentUrl(for identifier: String) -> String { | func getAttachmentUrl(for identifier: String) -> String { | ||||||
|     let serverBaseUrl = "https://nt.solian.app" |     let serverBaseUrl = UserDefaults.standard.getServerUrl() | ||||||
|      |      | ||||||
|     return identifier.starts(with: "http") ? identifier : "\(serverBaseUrl)/files/\(identifier)" |     return identifier.starts(with: "http") ? identifier : "\(serverBaseUrl)/drive/files/\(identifier)" | ||||||
| } | } | ||||||
|   | |||||||
| @@ -26,6 +26,6 @@ extension UserDefaults { | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     func getServerUrl(forKey key: String = "app_server_url") -> String { |     func getServerUrl(forKey key: String = "app_server_url") -> String { | ||||||
|         return self.getFlutterValue(forKey: key) ?? "https://nt.solian.app" |         return self.getFlutterValue(forKey: key) ?? "https://api.solian.app" | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										37
									
								
								ios/SolianBroadcastExtension/Atomic.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,37 @@ | |||||||
|  | // | ||||||
|  | //  Atomic.swift | ||||||
|  | //  Broadcast Extension | ||||||
|  | // | ||||||
|  | //  Created by Maksym Shcheglov. | ||||||
|  | //  https://www.onswiftwings.com/posts/atomic-property-wrapper/ | ||||||
|  | // | ||||||
|  |  | ||||||
|  | import Foundation | ||||||
|  |  | ||||||
|  | @propertyWrapper | ||||||
|  | struct Atomic<Value> { | ||||||
|  |  | ||||||
|  |     private var value: Value | ||||||
|  |     private let lock = NSLock() | ||||||
|  |  | ||||||
|  |     init(wrappedValue value: Value) { | ||||||
|  |         self.value = value | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     var wrappedValue: Value { | ||||||
|  |         get { load() } | ||||||
|  |         set { store(newValue: newValue) } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func load() -> Value { | ||||||
|  |         lock.lock() | ||||||
|  |         defer { lock.unlock() } | ||||||
|  |         return value | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     mutating func store(newValue: Value) { | ||||||
|  |         lock.lock() | ||||||
|  |         defer { lock.unlock() } | ||||||
|  |         value = newValue | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								ios/SolianBroadcastExtension/DarwinNotification.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,29 @@ | |||||||
|  | // | ||||||
|  | //  DarwinNotificationCenter.swift | ||||||
|  | //  Broadcast Extension | ||||||
|  | // | ||||||
|  | //  Created by Alex-Dan Bumbu on 23/03/2021. | ||||||
|  | //  Copyright © 2021 8x8, Inc. All rights reserved. | ||||||
|  | // | ||||||
|  |  | ||||||
|  | import Foundation | ||||||
|  |  | ||||||
|  | enum DarwinNotification: String { | ||||||
|  |     case broadcastStarted = "iOS_BroadcastStarted" | ||||||
|  |     case broadcastStopped = "iOS_BroadcastStopped" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class DarwinNotificationCenter { | ||||||
|  |      | ||||||
|  |     static let shared = DarwinNotificationCenter() | ||||||
|  |      | ||||||
|  |     private let notificationCenter: CFNotificationCenter | ||||||
|  |      | ||||||
|  |     init() { | ||||||
|  |         notificationCenter = CFNotificationCenterGetDarwinNotifyCenter() | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     func postNotification(_ name: DarwinNotification) { | ||||||
|  |         CFNotificationCenterPostNotification(notificationCenter, CFNotificationName(rawValue: name.rawValue as CFString), nil, nil, true) | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								ios/SolianBroadcastExtension/Info.plist
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,15 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||||
|  | <plist version="1.0"> | ||||||
|  | <dict> | ||||||
|  | 	<key>NSExtension</key> | ||||||
|  | 	<dict> | ||||||
|  | 		<key>NSExtensionPointIdentifier</key> | ||||||
|  | 		<string>com.apple.broadcast-services-upload</string> | ||||||
|  | 		<key>NSExtensionPrincipalClass</key> | ||||||
|  | 		<string>$(PRODUCT_MODULE_NAME).SampleHandler</string> | ||||||
|  | 		<key>RPBroadcastProcessMode</key> | ||||||
|  | 		<string>RPBroadcastProcessModeSampleBuffer</string> | ||||||
|  | 	</dict> | ||||||
|  | </dict> | ||||||
|  | </plist> | ||||||
							
								
								
									
										103
									
								
								ios/SolianBroadcastExtension/SampleHandler.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,103 @@ | |||||||
|  | // | ||||||
|  | //  SampleHandler.swift | ||||||
|  | //  Broadcast Extension | ||||||
|  | // | ||||||
|  | //  Created by Alex-Dan Bumbu on 04.06.2021. | ||||||
|  | // | ||||||
|  |  | ||||||
|  | import ReplayKit | ||||||
|  | import OSLog | ||||||
|  |  | ||||||
|  | let broadcastLogger = OSLog(subsystem: "dev.solsynth.solian", category: "Broadcast") | ||||||
|  | private enum Constants { | ||||||
|  |     // the App Group ID value that the app and the broadcast extension targets are setup with. It differs for each app. | ||||||
|  |     static let appGroupIdentifier = "group.solsynth.solian" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class SampleHandler: RPBroadcastSampleHandler { | ||||||
|  |  | ||||||
|  |     private var clientConnection: SocketConnection? | ||||||
|  |     private var uploader: SampleUploader? | ||||||
|  |  | ||||||
|  |     private var frameCount: Int = 0 | ||||||
|  |  | ||||||
|  |     var socketFilePath: String { | ||||||
|  |       let sharedContainer = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: Constants.appGroupIdentifier) | ||||||
|  |         return sharedContainer?.appendingPathComponent("rtc_SSFD").path ?? "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     override init() { | ||||||
|  |       super.init() | ||||||
|  |         if let connection = SocketConnection(filePath: socketFilePath) { | ||||||
|  |           clientConnection = connection | ||||||
|  |           setupConnection() | ||||||
|  |  | ||||||
|  |           uploader = SampleUploader(connection: connection) | ||||||
|  |         } | ||||||
|  |         os_log(.debug, log: broadcastLogger, "%{public}s", socketFilePath) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     override func broadcastStarted(withSetupInfo setupInfo: [String: NSObject]?) { | ||||||
|  |         // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional. | ||||||
|  |         frameCount = 0 | ||||||
|  |  | ||||||
|  |         DarwinNotificationCenter.shared.postNotification(.broadcastStarted) | ||||||
|  |         openConnection() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     override func broadcastPaused() { | ||||||
|  |         // User has requested to pause the broadcast. Samples will stop being delivered. | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     override func broadcastResumed() { | ||||||
|  |         // User has requested to resume the broadcast. Samples delivery will resume. | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     override func broadcastFinished() { | ||||||
|  |         // User has requested to finish the broadcast. | ||||||
|  |         DarwinNotificationCenter.shared.postNotification(.broadcastStopped) | ||||||
|  |         clientConnection?.close() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) { | ||||||
|  |         switch sampleBufferType { | ||||||
|  |         case RPSampleBufferType.video: | ||||||
|  |             uploader?.send(sample: sampleBuffer) | ||||||
|  |         default: | ||||||
|  |             break | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | private extension SampleHandler { | ||||||
|  |  | ||||||
|  |     func setupConnection() { | ||||||
|  |         clientConnection?.didClose = { [weak self] error in | ||||||
|  |             os_log(.debug, log: broadcastLogger, "client connection did close \(String(describing: error))") | ||||||
|  |  | ||||||
|  |             if let error = error { | ||||||
|  |                 self?.finishBroadcastWithError(error) | ||||||
|  |             } else { | ||||||
|  |                 // the displayed failure message is more user friendly when using NSError instead of Error | ||||||
|  |                 let JMScreenSharingStopped = 10001 | ||||||
|  |                 let customError = NSError(domain: RPRecordingErrorDomain, code: JMScreenSharingStopped, userInfo: [NSLocalizedDescriptionKey: "Screen sharing stopped"]) | ||||||
|  |                 self?.finishBroadcastWithError(customError) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func openConnection() { | ||||||
|  |         let queue = DispatchQueue(label: "broadcast.connectTimer") | ||||||
|  |         let timer = DispatchSource.makeTimerSource(queue: queue) | ||||||
|  |         timer.schedule(deadline: .now(), repeating: .milliseconds(100), leeway: .milliseconds(500)) | ||||||
|  |         timer.setEventHandler { [weak self] in | ||||||
|  |             guard self?.clientConnection?.open() == true else { | ||||||
|  |                 return | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             timer.cancel() | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         timer.resume() | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										147
									
								
								ios/SolianBroadcastExtension/SampleUploader.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,147 @@ | |||||||
|  | // | ||||||
|  | //  SampleUploader.swift | ||||||
|  | //  Broadcast Extension | ||||||
|  | // | ||||||
|  | //  Created by Alex-Dan Bumbu on 22/03/2021. | ||||||
|  | //  Copyright © 2021 8x8, Inc. All rights reserved. | ||||||
|  | // | ||||||
|  |  | ||||||
|  | import Foundation | ||||||
|  | import ReplayKit | ||||||
|  | import OSLog | ||||||
|  |  | ||||||
|  | private enum Constants { | ||||||
|  |     static let bufferMaxLength = 10240 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class SampleUploader { | ||||||
|  |      | ||||||
|  |     private static var imageContext = CIContext(options: nil) | ||||||
|  |      | ||||||
|  |     @Atomic private var isReady = false | ||||||
|  |     private var connection: SocketConnection | ||||||
|  |    | ||||||
|  |     private var dataToSend: Data? | ||||||
|  |     private var byteIndex = 0 | ||||||
|  |    | ||||||
|  |     private let serialQueue: DispatchQueue | ||||||
|  |      | ||||||
|  |     init(connection: SocketConnection) { | ||||||
|  |         self.connection = connection | ||||||
|  |         self.serialQueue = DispatchQueue(label: "org.jitsi.meet.broadcast.sampleUploader") | ||||||
|  |        | ||||||
|  |         setupConnection() | ||||||
|  |     } | ||||||
|  |    | ||||||
|  |     @discardableResult func send(sample buffer: CMSampleBuffer) -> Bool { | ||||||
|  |         guard isReady else { | ||||||
|  |             return false | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         isReady = false | ||||||
|  |  | ||||||
|  |         dataToSend = prepare(sample: buffer) | ||||||
|  |         byteIndex = 0 | ||||||
|  |  | ||||||
|  |         serialQueue.async { [weak self] in | ||||||
|  |             self?.sendDataChunk() | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return true | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | private extension SampleUploader { | ||||||
|  |      | ||||||
|  |     func setupConnection() { | ||||||
|  |         connection.didOpen = { [weak self] in | ||||||
|  |             self?.isReady = true | ||||||
|  |         } | ||||||
|  |         connection.streamHasSpaceAvailable = { [weak self] in | ||||||
|  |             self?.serialQueue.async { | ||||||
|  |                 if let success = self?.sendDataChunk() { | ||||||
|  |                     self?.isReady = !success | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     @discardableResult func sendDataChunk() -> Bool { | ||||||
|  |         guard let dataToSend = dataToSend else { | ||||||
|  |             return false | ||||||
|  |         } | ||||||
|  |        | ||||||
|  |         var bytesLeft = dataToSend.count - byteIndex | ||||||
|  |         var length = bytesLeft > Constants.bufferMaxLength ? Constants.bufferMaxLength : bytesLeft | ||||||
|  |  | ||||||
|  |         length = dataToSend[byteIndex..<(byteIndex + length)].withUnsafeBytes { | ||||||
|  |             guard let ptr = $0.bindMemory(to: UInt8.self).baseAddress else { | ||||||
|  |                 return 0 | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return connection.writeToStream(buffer: ptr, maxLength: length) | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if length > 0 { | ||||||
|  |             byteIndex += length | ||||||
|  |             bytesLeft -= length | ||||||
|  |  | ||||||
|  |             if bytesLeft == 0 { | ||||||
|  |                 self.dataToSend = nil | ||||||
|  |                 byteIndex = 0 | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|  |             os_log(.debug, log: broadcastLogger, "writeBufferToStream failure") | ||||||
|  |         } | ||||||
|  |        | ||||||
|  |         return true | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     func prepare(sample buffer: CMSampleBuffer) -> Data? { | ||||||
|  |         guard let imageBuffer = CMSampleBufferGetImageBuffer(buffer) else { | ||||||
|  |             os_log(.debug, log: broadcastLogger, "image buffer not available") | ||||||
|  |             return nil | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         CVPixelBufferLockBaseAddress(imageBuffer, .readOnly) | ||||||
|  |          | ||||||
|  |         let scaleFactor = 1.0 | ||||||
|  |         let width = CVPixelBufferGetWidth(imageBuffer)/Int(scaleFactor) | ||||||
|  |         let height = CVPixelBufferGetHeight(imageBuffer)/Int(scaleFactor) | ||||||
|  |         let orientation = CMGetAttachment(buffer, key: RPVideoSampleOrientationKey as CFString, attachmentModeOut: nil)?.uintValue ?? 0 | ||||||
|  |                                      | ||||||
|  |         let scaleTransform = CGAffineTransform(scaleX: CGFloat(1.0/scaleFactor), y: CGFloat(1.0/scaleFactor)) | ||||||
|  |         let bufferData = self.jpegData(from: imageBuffer, scale: scaleTransform) | ||||||
|  |          | ||||||
|  |         CVPixelBufferUnlockBaseAddress(imageBuffer, .readOnly) | ||||||
|  |          | ||||||
|  |         guard let messageData = bufferData else { | ||||||
|  |             os_log(.debug, log: broadcastLogger, "corrupted image buffer") | ||||||
|  |             return nil | ||||||
|  |         } | ||||||
|  |                | ||||||
|  |         let httpResponse = CFHTTPMessageCreateResponse(nil, 200, nil, kCFHTTPVersion1_1).takeRetainedValue() | ||||||
|  |         CFHTTPMessageSetHeaderFieldValue(httpResponse, "Content-Length" as CFString, String(messageData.count) as CFString) | ||||||
|  |         CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Width" as CFString, String(width) as CFString) | ||||||
|  |         CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Height" as CFString, String(height) as CFString) | ||||||
|  |         CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Orientation" as CFString, String(orientation) as CFString) | ||||||
|  |          | ||||||
|  |         CFHTTPMessageSetBody(httpResponse, messageData as CFData) | ||||||
|  |          | ||||||
|  |         let serializedMessage = CFHTTPMessageCopySerializedMessage(httpResponse)?.takeRetainedValue() as Data? | ||||||
|  |        | ||||||
|  |         return serializedMessage | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     func jpegData(from buffer: CVPixelBuffer, scale scaleTransform: CGAffineTransform) -> Data? { | ||||||
|  |         let image = CIImage(cvPixelBuffer: buffer).transformed(by: scaleTransform) | ||||||
|  |          | ||||||
|  |         guard let colorSpace = image.colorSpace else { | ||||||
|  |             return nil | ||||||
|  |         } | ||||||
|  |        | ||||||
|  |         let options: [CIImageRepresentationOption: Float] = [kCGImageDestinationLossyCompressionQuality as CIImageRepresentationOption: 1.0] | ||||||
|  |  | ||||||
|  |         return SampleUploader.imageContext.jpegRepresentation(of: image, colorSpace: colorSpace, options: options) | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										199
									
								
								ios/SolianBroadcastExtension/SocketConnection.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,199 @@ | |||||||
|  | // | ||||||
|  | //  SocketConnection.swift | ||||||
|  | //  Broadcast Extension | ||||||
|  | // | ||||||
|  | //  Created by Alex-Dan Bumbu on 22/03/2021. | ||||||
|  | //  Copyright © 2021 Atlassian Inc. All rights reserved. | ||||||
|  | // | ||||||
|  |  | ||||||
|  | import Foundation | ||||||
|  | import OSLog | ||||||
|  |  | ||||||
|  | class SocketConnection: NSObject { | ||||||
|  |     var didOpen: (() -> Void)? | ||||||
|  |     var didClose: ((Error?) -> Void)? | ||||||
|  |     var streamHasSpaceAvailable: (() -> Void)? | ||||||
|  |  | ||||||
|  |     private let filePath: String | ||||||
|  |     private var socketHandle: Int32 = -1 | ||||||
|  |     private var address: sockaddr_un? | ||||||
|  |  | ||||||
|  |     private var inputStream: InputStream? | ||||||
|  |     private var outputStream: OutputStream? | ||||||
|  |      | ||||||
|  |     private var networkQueue: DispatchQueue? | ||||||
|  |     private var shouldKeepRunning = false | ||||||
|  |  | ||||||
|  |     init?(filePath path: String) { | ||||||
|  |         filePath = path | ||||||
|  |         socketHandle = Darwin.socket(AF_UNIX, SOCK_STREAM, 0) | ||||||
|  |  | ||||||
|  |         guard socketHandle != -1 else { | ||||||
|  |             os_log(.debug, log: broadcastLogger, "failure: create socket") | ||||||
|  |             return nil | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func open() -> Bool { | ||||||
|  |         os_log(.debug, log: broadcastLogger, "open socket connection") | ||||||
|  |  | ||||||
|  |         guard FileManager.default.fileExists(atPath: filePath) else { | ||||||
|  |             os_log(.debug, log: broadcastLogger, "failure: socket file missing") | ||||||
|  |             return false | ||||||
|  |         } | ||||||
|  |        | ||||||
|  |         guard setupAddress() == true else { | ||||||
|  |             return false | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         guard connectSocket() == true else { | ||||||
|  |             return false | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         setupStreams() | ||||||
|  |          | ||||||
|  |         inputStream?.open() | ||||||
|  |         outputStream?.open() | ||||||
|  |  | ||||||
|  |         return true | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func close() { | ||||||
|  |         unscheduleStreams() | ||||||
|  |  | ||||||
|  |         inputStream?.delegate = nil | ||||||
|  |         outputStream?.delegate = nil | ||||||
|  |  | ||||||
|  |         inputStream?.close() | ||||||
|  |         outputStream?.close() | ||||||
|  |          | ||||||
|  |         inputStream = nil | ||||||
|  |         outputStream = nil | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func writeToStream(buffer: UnsafePointer<UInt8>, maxLength length: Int) -> Int { | ||||||
|  |         outputStream?.write(buffer, maxLength: length) ?? 0 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | extension SocketConnection: StreamDelegate { | ||||||
|  |  | ||||||
|  |     func stream(_ aStream: Stream, handle eventCode: Stream.Event) { | ||||||
|  |         switch eventCode { | ||||||
|  |         case .openCompleted: | ||||||
|  |             os_log(.debug, log: broadcastLogger, "client stream open completed") | ||||||
|  |             if aStream == outputStream { | ||||||
|  |                 didOpen?() | ||||||
|  |             } | ||||||
|  |         case .hasBytesAvailable: | ||||||
|  |             if aStream == inputStream { | ||||||
|  |                 var buffer: UInt8 = 0 | ||||||
|  |                 let numberOfBytesRead = inputStream?.read(&buffer, maxLength: 1) | ||||||
|  |                 if numberOfBytesRead == 0 && aStream.streamStatus == .atEnd { | ||||||
|  |                     os_log(.debug, log: broadcastLogger, "server socket closed") | ||||||
|  |                     close() | ||||||
|  |                     notifyDidClose(error: nil) | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         case .hasSpaceAvailable: | ||||||
|  |             if aStream == outputStream { | ||||||
|  |                 streamHasSpaceAvailable?() | ||||||
|  |             } | ||||||
|  |         case .errorOccurred: | ||||||
|  |             os_log(.debug, log: broadcastLogger, "client stream error occured: \(String(describing: aStream.streamError))") | ||||||
|  |             close() | ||||||
|  |             notifyDidClose(error: aStream.streamError) | ||||||
|  |  | ||||||
|  |         default: | ||||||
|  |             break | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | private extension SocketConnection { | ||||||
|  |    | ||||||
|  |     func setupAddress() -> Bool { | ||||||
|  |         var addr = sockaddr_un() | ||||||
|  |         guard filePath.count < MemoryLayout.size(ofValue: addr.sun_path) else { | ||||||
|  |             os_log(.debug, log: broadcastLogger, "failure: fd path is too long") | ||||||
|  |             return false | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         _ = withUnsafeMutablePointer(to: &addr.sun_path.0) { ptr in | ||||||
|  |             filePath.withCString { | ||||||
|  |                 strncpy(ptr, $0, filePath.count) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         address = addr | ||||||
|  |         return true | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func connectSocket() -> Bool { | ||||||
|  |         guard var addr = address else { | ||||||
|  |             return false | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         let status = withUnsafePointer(to: &addr) { ptr in | ||||||
|  |             ptr.withMemoryRebound(to: sockaddr.self, capacity: 1) { | ||||||
|  |                 Darwin.connect(socketHandle, $0, socklen_t(MemoryLayout<sockaddr_un>.size)) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         guard status == noErr else { | ||||||
|  |             os_log(.debug, log: broadcastLogger, "failure: \(status)") | ||||||
|  |             return false | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return true | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func setupStreams() { | ||||||
|  |         var readStream: Unmanaged<CFReadStream>? | ||||||
|  |         var writeStream: Unmanaged<CFWriteStream>? | ||||||
|  |  | ||||||
|  |         CFStreamCreatePairWithSocket(kCFAllocatorDefault, socketHandle, &readStream, &writeStream) | ||||||
|  |  | ||||||
|  |         inputStream = readStream?.takeRetainedValue() | ||||||
|  |         inputStream?.delegate = self | ||||||
|  |         inputStream?.setProperty(kCFBooleanTrue, forKey: Stream.PropertyKey(kCFStreamPropertyShouldCloseNativeSocket as String)) | ||||||
|  |  | ||||||
|  |         outputStream = writeStream?.takeRetainedValue() | ||||||
|  |         outputStream?.delegate = self | ||||||
|  |         outputStream?.setProperty(kCFBooleanTrue, forKey: Stream.PropertyKey(kCFStreamPropertyShouldCloseNativeSocket as String)) | ||||||
|  |  | ||||||
|  |         scheduleStreams() | ||||||
|  |     } | ||||||
|  |    | ||||||
|  |     func scheduleStreams() { | ||||||
|  |         shouldKeepRunning = true | ||||||
|  |          | ||||||
|  |         networkQueue = DispatchQueue.global(qos: .userInitiated) | ||||||
|  |         networkQueue?.async { [weak self] in | ||||||
|  |             self?.inputStream?.schedule(in: .current, forMode: .common) | ||||||
|  |             self?.outputStream?.schedule(in: .current, forMode: .common) | ||||||
|  |             RunLoop.current.run() | ||||||
|  |              | ||||||
|  |             var isRunning = false | ||||||
|  |                          | ||||||
|  |             repeat { | ||||||
|  |                 isRunning = self?.shouldKeepRunning ?? false && RunLoop.current.run(mode: .default, before: .distantFuture) | ||||||
|  |             } while (isRunning) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     func unscheduleStreams() { | ||||||
|  |         networkQueue?.sync { [weak self] in | ||||||
|  |             self?.inputStream?.remove(from: .current, forMode: .common) | ||||||
|  |             self?.outputStream?.remove(from: .current, forMode: .common) | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         shouldKeepRunning = false | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     func notifyDidClose(error: Error?) { | ||||||
|  |         if didClose != nil { | ||||||
|  |             didClose?(error) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,10 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||||
|  | <plist version="1.0"> | ||||||
|  | <dict> | ||||||
|  | 	<key>com.apple.security.application-groups</key> | ||||||
|  | 	<array> | ||||||
|  | 		<string>group.solsynth.solian</string> | ||||||
|  | 	</array> | ||||||
|  | </dict> | ||||||
|  | </plist> | ||||||
| @@ -59,39 +59,55 @@ class NotificationService: UNNotificationServiceExtension { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         let pfpIdentifier = meta["pfp"] as? String |         let pfpIdentifier = meta["pfp"] as? String | ||||||
|          |  | ||||||
|         content.categoryIdentifier = "REPLYABLE_MESSAGE" |  | ||||||
|          |  | ||||||
|         let metaCopy = meta as? [String: Any] ?? [:] |         let metaCopy = meta as? [String: Any] ?? [:] | ||||||
|         let pfpUrl = pfpIdentifier != nil ? getAttachmentUrl(for: pfpIdentifier!) : nil |         let pfpUrl = pfpIdentifier != nil ? getAttachmentUrl(for: pfpIdentifier!) : nil | ||||||
|  |  | ||||||
|         let targetSize = 512 |         let handle = INPersonHandle(value: "\(metaCopy["user_id"] ?? "")", type: .unknown) | ||||||
|         let scaleProcessor = ResizingImageProcessor(referenceSize: CGSize(width: targetSize, height: targetSize), mode: .aspectFit) |  | ||||||
|  |  | ||||||
|         KingfisherManager.shared.retrieveImage(with: URL(string: pfpUrl!)!, options: [.processor(scaleProcessor)], completionHandler: { result in |         if let pfpUrl = pfpUrl, let url = URL(string: pfpUrl) { | ||||||
|             var image: Data? |             let targetSize = 512 | ||||||
|             switch result { |             let scaleProcessor = ResizingImageProcessor(referenceSize: CGSize(width: targetSize, height: targetSize), mode: .aspectFit) | ||||||
|             case .success(let value): |  | ||||||
|                 image = value.image.pngData() |  | ||||||
|             case .failure(let error): |  | ||||||
|                 print("Unable to get pfp url: \(error)") |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             let handle = INPersonHandle(value: "\(metaCopy["user_id"] ?? "")", type: .unknown) |             KingfisherManager.shared.retrieveImage(with: url, options: [.processor(scaleProcessor)], completionHandler: { result in | ||||||
|  |                 var image: Data? | ||||||
|  |                 switch result { | ||||||
|  |                 case .success(let value): | ||||||
|  |                     image = value.image.pngData() | ||||||
|  |                 case .failure(let error): | ||||||
|  |                     print("Unable to get pfp url: \(error)") | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 let sender = INPerson( | ||||||
|  |                     personHandle: handle, | ||||||
|  |                     nameComponents: PersonNameComponents(nickname: "\(metaCopy["sender_name"] ?? "")"), | ||||||
|  |                     displayName: content.title, | ||||||
|  |                     image: image == nil ? nil : INImage(imageData: image!), | ||||||
|  |                     contactIdentifier: nil, | ||||||
|  |                     customIdentifier: nil | ||||||
|  |                 ) | ||||||
|  |  | ||||||
|  |                 let intent = self.createMessageIntent(with: sender, meta: metaCopy, body: content.body) | ||||||
|  |                 self.donateInteraction(for: intent) | ||||||
|  |  | ||||||
|  |                 content.categoryIdentifier = "CHAT_MESSAGE" | ||||||
|  |                 self.contentHandler?(content) | ||||||
|  |             }) | ||||||
|  |         } else { | ||||||
|             let sender = INPerson( |             let sender = INPerson( | ||||||
|                 personHandle: handle, |                 personHandle: handle, | ||||||
|                 nameComponents: PersonNameComponents(nickname: "\(metaCopy["sender_name"] ?? "")"), |                 nameComponents: PersonNameComponents(nickname: "\(metaCopy["sender_name"] ?? "")"), | ||||||
|                 displayName: content.title, |                 displayName: content.title, | ||||||
|                 image: image == nil ? nil : INImage(imageData: image!), |                 image: nil, | ||||||
|                 contactIdentifier: nil, |                 contactIdentifier: nil, | ||||||
|                 customIdentifier: nil |                 customIdentifier: nil | ||||||
|             ) |             ) | ||||||
|  |  | ||||||
|             let intent = self.createMessageIntent(with: sender, meta: metaCopy, body: content.body) |             let intent = self.createMessageIntent(with: sender, meta: metaCopy, body: content.body) | ||||||
|             self.donateInteraction(for: intent) |             self.donateInteraction(for: intent) | ||||||
|             let updatedContent = try? request.content.updating(from: intent) |  | ||||||
|             self.contentHandler?(updatedContent ?? content) |             content.categoryIdentifier = "CHAT_MESSAGE" | ||||||
|         }) |             self.contentHandler?(content) | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     private func handleDefaultNotification(content: UNMutableNotificationContent) throws { |     private func handleDefaultNotification(content: UNMutableNotificationContent) throws { | ||||||
|   | |||||||
| @@ -0,0 +1,15 @@ | |||||||
|  | { | ||||||
|  |   "colors" : [ | ||||||
|  |     { | ||||||
|  |       "color" : { | ||||||
|  |         "platform" : "universal", | ||||||
|  |         "reference" : "systemIndigoColor" | ||||||
|  |       }, | ||||||
|  |       "idiom" : "universal" | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "info" : { | ||||||
|  |     "author" : "xcode", | ||||||
|  |     "version" : 1 | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -0,0 +1,318 @@ | |||||||
|  | { | ||||||
|  |   "images" : [ | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-20x20@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "20x20" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-20x20@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "20x20" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-29x29@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "29x29" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-29x29@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "29x29" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-38x38@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "38x38" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-38x38@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "38x38" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-40x40@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "40x40" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-40x40@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "40x40" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-60x60@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "60x60" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-60x60@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "60x60" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-64x64@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "64x64" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-64x64@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "3x", | ||||||
|  |       "size" : "64x64" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-68x68@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "68x68" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-76x76@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "76x76" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-83.5x83.5@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "83.5x83.5" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-ios-1024x1024.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "ios", | ||||||
|  |       "size" : "1024x1024" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-16x16.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "1x", | ||||||
|  |       "size" : "16x16" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-16x16@2x.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "16x16" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-32x32.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "1x", | ||||||
|  |       "size" : "32x32" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-32x32@2x.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "32x32" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-128x128.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "1x", | ||||||
|  |       "size" : "128x128" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-128x128@2x.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "128x128" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-256x256.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "1x", | ||||||
|  |       "size" : "256x256" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-256x256@2x.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "256x256" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-512x512.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "1x", | ||||||
|  |       "size" : "512x512" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-mac-512x512@2x.png", | ||||||
|  |       "idiom" : "mac", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "512x512" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-22x22@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "22x22" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-24x24@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "24x24" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-27.5x27.5@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "27.5x27.5" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-29x29@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "29x29" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-30x30@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "30x30" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-32x32@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "32x32" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-33x33@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "33x33" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-40x40@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "40x40" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-43.5x43.5@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "43.5x43.5" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-44x44@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "44x44" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-46x46@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "46x46" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-50x50@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "50x50" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-51x51@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "51x51" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-54x54@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "54x54" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-86x86@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "86x86" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-98x98@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "98x98" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-108x108@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "108x108" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-117x117@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "117x117" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-129x129@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "scale" : "2x", | ||||||
|  |       "size" : "129x129" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "filename" : "icon-watchos-1024x1024.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|  |       "platform" : "watchos", | ||||||
|  |       "size" : "1024x1024" | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "info" : { | ||||||
|  |     "author" : "xcode", | ||||||
|  |     "version" : 1 | ||||||
|  |   } | ||||||
|  | } | ||||||
| After Width: | Height: | Size: 45 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 2.5 KiB | 
| After Width: | Height: | Size: 2.4 KiB | 
| After Width: | Height: | Size: 4.1 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 5.7 KiB | 
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 6.1 KiB | 
| After Width: | Height: | Size: 6.1 KiB | 
| After Width: | Height: | Size: 9.6 KiB | 
| After Width: | Height: | Size: 6.6 KiB | 
| After Width: | Height: | Size: 10 KiB | 
| After Width: | Height: | Size: 7.0 KiB | 
| After Width: | Height: | Size: 7.8 KiB | 
| After Width: | Height: | Size: 8.8 KiB | 
| After Width: | Height: | Size: 6.6 KiB | 
| After Width: | Height: | Size: 14 KiB | 
| After Width: | Height: | Size: 473 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 14 KiB | 
| After Width: | Height: | Size: 30 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 2.7 KiB | 
| After Width: | Height: | Size: 30 KiB | 
| After Width: | Height: | Size: 45 KiB | 
| After Width: | Height: | Size: 45 KiB | 
| After Width: | Height: | Size: 12 KiB | 
| After Width: | Height: | Size: 13 KiB | 
| After Width: | Height: | Size: 14 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 2.3 KiB | 
| After Width: | Height: | Size: 2.4 KiB | 
| After Width: | Height: | Size: 2.5 KiB | 
| After Width: | Height: | Size: 2.7 KiB | 
| After Width: | Height: | Size: 2.9 KiB | 
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 4.1 KiB | 
| After Width: | Height: | Size: 4.2 KiB | 
| After Width: | Height: | Size: 4.4 KiB | 
| After Width: | Height: | Size: 4.9 KiB |