From 331e0e8cc092c41844cd3f9aa7c5694da8ee2eda Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Mon, 14 Nov 2022 08:26:01 +0100 Subject: [PATCH 01/20] Update to fastlane 2.211.0 Signed-off-by: Tim Bert <5411131+timbms@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index d894f1a49..36e0aeb3e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -8,7 +8,7 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.659.0) + aws-partitions (1.660.0) aws-sdk-core (3.167.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.651.0) @@ -66,7 +66,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.2.6) - fastlane (2.210.1) + fastlane (2.211.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -219,4 +219,4 @@ DEPENDENCIES fastlane-plugin-versioning BUNDLED WITH - 2.3.24 + 2.3.11 From 791ecd782d23b270474f369a328e584879282586 Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Tue, 22 Nov 2022 20:19:51 +0100 Subject: [PATCH 02/20] Upgrade to macOS-13 Checking whether macOS-13 and Xcode 14 is already available on GitHub Actions --- .github/workflows/githubrelease.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/githubrelease.yml b/.github/workflows/githubrelease.yml index 853d5c1cc..08a63a024 100644 --- a/.github/workflows/githubrelease.yml +++ b/.github/workflows/githubrelease.yml @@ -5,7 +5,7 @@ on: jobs: set_github_release: - runs-on: macos-12 + runs-on: macos-13 steps: - name: checkout uses: actions/checkout@v3 From 4079bdc5d840ff8d9d103f608eca6254597891a7 Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Tue, 22 Nov 2022 20:34:05 +0100 Subject: [PATCH 03/20] Enforce usage of Xcode 14.1 --- .github/workflows/publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dd6abd6fe..65398658a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -59,3 +59,4 @@ jobs: lane: beta options: '{ "bump": "${{ github.event.inputs.bump_type }}" }' skip-tracking: true + xcode-version: '14.1' From 7108efbd72834ba6946a28f98c95bf24adfb9bcd Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Tue, 22 Nov 2022 20:39:11 +0100 Subject: [PATCH 04/20] Reverting enforcement of Xcode 14.1 Xcode 14.1 is already default on macos-12 version (still waiting for macos-13 from GitHub actions) --- .github/workflows/publish.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 65398658a..dd6abd6fe 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -59,4 +59,3 @@ jobs: lane: beta options: '{ "bump": "${{ github.event.inputs.bump_type }}" }' skip-tracking: true - xcode-version: '14.1' From aa0e7cf1e5046b04608bac28eeafbb9eaf91daac Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:05:49 +0100 Subject: [PATCH 05/20] Switching to Single Size Asset Catalog as supported by XCode 14 (#699) Signed-off-by: Tim Bert <5411131+timbms@users.noreply.github.com> --- .../AppIcon.appiconset/Contents.json | 114 +----------------- .../AppIcon.appiconset/icon_20pt.png | Bin 834 -> 0 bytes .../AppIcon.appiconset/icon_20pt@2x-1.png | Bin 1990 -> 0 bytes .../AppIcon.appiconset/icon_20pt@2x.png | Bin 1990 -> 0 bytes .../AppIcon.appiconset/icon_20pt@3x.png | Bin 3454 -> 0 bytes .../AppIcon.appiconset/icon_29pt.png | Bin 1370 -> 0 bytes .../AppIcon.appiconset/icon_29pt@2x-1.png | Bin 3302 -> 0 bytes .../AppIcon.appiconset/icon_29pt@2x.png | Bin 3302 -> 0 bytes .../AppIcon.appiconset/icon_29pt@3x.png | Bin 5478 -> 0 bytes .../AppIcon.appiconset/icon_40pt.png | Bin 1990 -> 0 bytes .../AppIcon.appiconset/icon_40pt@2x-1.png | Bin 5116 -> 0 bytes .../AppIcon.appiconset/icon_40pt@2x.png | Bin 5116 -> 0 bytes .../AppIcon.appiconset/icon_40pt@3x.png | Bin 9342 -> 0 bytes .../AppIcon.appiconset/icon_60pt@2x.png | Bin 9342 -> 0 bytes .../AppIcon.appiconset/icon_60pt@3x.png | Bin 18295 -> 0 bytes .../AppIcon.appiconset/icon_76pt.png | Bin 4807 -> 0 bytes .../AppIcon.appiconset/icon_76pt@2x.png | Bin 13764 -> 0 bytes .../AppIcon.appiconset/icon_83.5@2x.png | Bin 15861 -> 0 bytes 18 files changed, 6 insertions(+), 108 deletions(-) delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@2x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@3x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_29pt.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_29pt@2x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_29pt@3x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_40pt.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_40pt@2x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_40pt@3x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_60pt@2x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_60pt@3x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_76pt.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_76pt@2x.png delete mode 100644 openHAB/Images.xcassets/AppIcon.appiconset/icon_83.5@2x.png diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/Contents.json b/openHAB/Images.xcassets/AppIcon.appiconset/Contents.json index 0e6af4b0b..b3f44eb29 100644 --- a/openHAB/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/openHAB/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,116 +1,14 @@ { "images" : [ { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "icon_20pt@2x-1.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "icon_20pt@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "icon_29pt@2x-1.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "icon_29pt@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "icon_40pt@2x-1.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "icon_40pt@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "icon_60pt@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "icon_60pt@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "icon_20pt.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "icon_20pt@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "icon_29pt.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "icon_29pt@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "icon_40pt.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "icon_40pt@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "icon_76pt.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "icon_76pt@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "icon_83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", "filename" : "Icon.png", - "scale" : "1x" + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt.png b/openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt.png deleted file mode 100644 index 6a4da9da684b433f345a84f5a2a259e6f73953ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmV-I1HJr-P)Px%{7FPXR5%fRl+8<9K@`Q$%ZHJQi~5Ce(}E)XNU+?trkfKSG`UmK; zG!mk=^dAtc1qF9vS6z!_TZyP4P$Sqxh*1=aF_PrHzB78qXIpyVW#-MC`OUdEGtaoV zxUle_Filgig!ut9;T3cJ;_xqK&P$=N^^c0~`2*bm}Xl`!S zV9CHJm&-QmrY^Z$4#{LvxroJL=TqQuEvv!qA1#@$A*xTDfJRVn@%e+h6v0YqTRFeV|P(8m3t5neG zH8eCJ91g4Zm6a7;KSEvn;ltXnX3=OAZns;D>iHk2O^>3Q97VnOQ;k#a^Z76`GJ>_W zHPEqat{rY}ZlbNN4Lv@dm`W+n|I66Ag&b33Y*Q=coX3kzavthg!mf-?o zGYX22QRS4W(+orU3Rth#(bd%j?q(KpcA8htF#2A>L~Pp7S~#Jgu1{}aR?6zovs420 zh?wW?(cL==W(1!@!|cr%;>2>f71Z_Z3(}b^YPA}=ySr~33XsJ$QeT0`Phq}(2lM*u z5hRaj>GW6V6_%HmF)%Qo&a2Gn8mfU8QG9>$5}y|qz%u*=x~`dhyVPyr(HR^Zyrok> z!WgF42ftm*ot+&d5(#W?Z)-3$++<^815;B|D3wYWA0J0!W1~)&8sp&Lz&3J|7W?*f z#OmrQQmK?W!2HTEc(kh3D*F5TF*G!!V9vGF82Nl&0r}#bWdHK=64`7P{Q59jT3Xb> zXT3$sarPyQ{r!FQCIXpswo($&2t+gjW9yMY5j$I1$d*v2mSg{l-@HZLEju{rQ2+n{ M07*qoM6N<$f{-GPxc~qF diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png b/openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png deleted file mode 100644 index a018d991c15509fd77a6fbf0dad832311f21b91a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1990 zcmV;%2RZnOP)Px+fJsC_R9Fe6SV>G(XB0m7F&Rn)v{5NEDvDAXl_t{S*p+ceTxg80jGG!Ywg_n& z(^i%&OiW5!3tH%~(S@bZ1TDmYxUeoH!DypKQw&i-oaYhVd;Pxy-{ri^6*N7`yXX98 z{O&*B=RJG&EH3|p;_-p-AZJSGX@f4<9!UpVG9GV2DByYCutKAOK#d?c#*h<-^?PH0 zEM${e8OiYimI#0xHVcAn%OQha8z2+1_Xfg;p06q%)FUEHXZ6-TDnRSZB+yws({Q`zG&eUZSURp=y;@eST9wdyu(3A%z&$r)y3;Z#jYtjxxT>luIeYf3wx>>= zDw{TK5^#`>3zMlkckZ0j)z!(ZTemcB@#4j@apOimo_=aHdA%o3p7C-i?p`k%X2BQVL<&+~fkwy(ZT+ix)Koi5c zWy==dY-7S?-_Z%MTS`t&mh$p)T~yHT+qcgLX8kBDKsJz!$eWs)ge!3K=FK{+EM__U zL2<{Ud%u$Y-@n%!%oCOyJ-L4UdNuX-_R8_&$LW?Zipb#uv=~R8 zFJ8P*-SXwjl?Q#8&;?2VPhU&y&<5HLT(s_+L~v!*5>H8!*jt&yKuS}Mp98r_kXZvYS;zYL z`yhjGay)$aP@A}s&>37`#_ zkn!_}*cw>~VCks3062O7Bk>%#SaPcG=lj2%odDAN>lg9Cp)ojZ4wLmzWsqjfumh7~>M<{XBV$(S5mW884to&-n^w+6Y#{rmS-#2qpi zkG9`~EQ0Rmyuf`=g8;C;QsO5ERx5kXf@8cb0$ntHti&qZ@a7I2Z;_T?wI|_+TD&|E zAcvoMe1K3;IdkSr-9&Mi4=jisq2L%Z5?A1EPFj#jt-p!a{ja#ovRuA=87_Jlu)f9& z;?XOA(15GZq)C$`&D~nUdQMWu_%CB)wUT>Soi96((emArRQ;LTJo_Y?lP~|Yx9fEd zadYO((Qx?V$2pnI1lBNR$`tLn1aO5VBAqVm#VmGIh$`oQ!XC$6$A-h95qB zSb0uPj!c*^!H)+x3^gbLAQVWXzmB${VFft1TG4ZsSe$W|TiN6ah# z&_|8#k+4XpR31r^_@`A8cf;D%(<`;LwSrp?$tHv@xcUf+96pe-Gt|`7=v59|+PZb? zU>f$~s&tRgA*M0z4t{I{yLRmoTwt+hm6esrm@xxGO^}?>h@*}<$f3V|`?lZ{qNk@v z)c|KNBT(9S$l8NJ1KZ%(6Y=p4x^(H1R905X>C>kZ-k3?jg9IIVx81GSojZ3*cXzkC z;Hou${(L_V{en5X>({S4-OyEwb1A69_X94Lq@toCS+HP%ZV$MXfNTuf_{hiC+|i>) zg|`(9>)N$zHJ1L2MLSsE2S{gf1cBHFKY#wbey7~Habv*fo@r@mlAoWiAMN;vM{nWa z$8dIbcIsawbk5DqRdDdPgxst{J=>m}4^AE$8py%64eIObleV@tIdS5ISfKO?;}a)N z6l^7&D)1SphRxw!yLK%e?AF&wfC3mc%ttp(^bUzdgj~2n;cUgX3@*I@NJ89b_2>(( z0IA?xfm=B&A!4jgSbH>`wL=c05w{rz5QuGC-Dq-{-RhV(j4MF&kR=2|hY26ndp0>` za^#^*ZgoK!?U88MQOBg@07-(5FGD+Ql*vcaG2iR(VMELyTg(;=0=9l(GISgT=6)0Y YAH*T+EGTz0KmY&$07*qoM6N<$g8y^X)&Kwi diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@2x.png b/openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@2x.png deleted file mode 100644 index a018d991c15509fd77a6fbf0dad832311f21b91a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1990 zcmV;%2RZnOP)Px+fJsC_R9Fe6SV>G(XB0m7F&Rn)v{5NEDvDAXl_t{S*p+ceTxg80jGG!Ywg_n& z(^i%&OiW5!3tH%~(S@bZ1TDmYxUeoH!DypKQw&i-oaYhVd;Pxy-{ri^6*N7`yXX98 z{O&*B=RJG&EH3|p;_-p-AZJSGX@f4<9!UpVG9GV2DByYCutKAOK#d?c#*h<-^?PH0 zEM${e8OiYimI#0xHVcAn%OQha8z2+1_Xfg;p06q%)FUEHXZ6-TDnRSZB+yws({Q`zG&eUZSURp=y;@eST9wdyu(3A%z&$r)y3;Z#jYtjxxT>luIeYf3wx>>= zDw{TK5^#`>3zMlkckZ0j)z!(ZTemcB@#4j@apOimo_=aHdA%o3p7C-i?p`k%X2BQVL<&+~fkwy(ZT+ix)Koi5c zWy==dY-7S?-_Z%MTS`t&mh$p)T~yHT+qcgLX8kBDKsJz!$eWs)ge!3K=FK{+EM__U zL2<{Ud%u$Y-@n%!%oCOyJ-L4UdNuX-_R8_&$LW?Zipb#uv=~R8 zFJ8P*-SXwjl?Q#8&;?2VPhU&y&<5HLT(s_+L~v!*5>H8!*jt&yKuS}Mp98r_kXZvYS;zYL z`yhjGay)$aP@A}s&>37`#_ zkn!_}*cw>~VCks3062O7Bk>%#SaPcG=lj2%odDAN>lg9Cp)ojZ4wLmzWsqjfumh7~>M<{XBV$(S5mW884to&-n^w+6Y#{rmS-#2qpi zkG9`~EQ0Rmyuf`=g8;C;QsO5ERx5kXf@8cb0$ntHti&qZ@a7I2Z;_T?wI|_+TD&|E zAcvoMe1K3;IdkSr-9&Mi4=jisq2L%Z5?A1EPFj#jt-p!a{ja#ovRuA=87_Jlu)f9& z;?XOA(15GZq)C$`&D~nUdQMWu_%CB)wUT>Soi96((emArRQ;LTJo_Y?lP~|Yx9fEd zadYO((Qx?V$2pnI1lBNR$`tLn1aO5VBAqVm#VmGIh$`oQ!XC$6$A-h95qB zSb0uPj!c*^!H)+x3^gbLAQVWXzmB${VFft1TG4ZsSe$W|TiN6ah# z&_|8#k+4XpR31r^_@`A8cf;D%(<`;LwSrp?$tHv@xcUf+96pe-Gt|`7=v59|+PZb? zU>f$~s&tRgA*M0z4t{I{yLRmoTwt+hm6esrm@xxGO^}?>h@*}<$f3V|`?lZ{qNk@v z)c|KNBT(9S$l8NJ1KZ%(6Y=p4x^(H1R905X>C>kZ-k3?jg9IIVx81GSojZ3*cXzkC z;Hou${(L_V{en5X>({S4-OyEwb1A69_X94Lq@toCS+HP%ZV$MXfNTuf_{hiC+|i>) zg|`(9>)N$zHJ1L2MLSsE2S{gf1cBHFKY#wbey7~Habv*fo@r@mlAoWiAMN;vM{nWa z$8dIbcIsawbk5DqRdDdPgxst{J=>m}4^AE$8py%64eIObleV@tIdS5ISfKO?;}a)N z6l^7&D)1SphRxw!yLK%e?AF&wfC3mc%ttp(^bUzdgj~2n;cUgX3@*I@NJ89b_2>(( z0IA?xfm=B&A!4jgSbH>`wL=c05w{rz5QuGC-Dq-{-RhV(j4MF&kR=2|hY26ndp0>` za^#^*ZgoK!?U88MQOBg@07-(5FGD+Ql*vcaG2iR(VMELyTg(;=0=9l(GISgT=6)0Y YAH*T+EGTz0KmY&$07*qoM6N<$g8y^X)&Kwi diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@3x.png b/openHAB/Images.xcassets/AppIcon.appiconset/icon_20pt@3x.png deleted file mode 100644 index 0a762e0882807bb7153f0183e59abddb7ca1e33c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3454 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 diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png b/openHAB/Images.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png deleted file mode 100644 index cdb3748a6afe22ce21f08359c3ba9fc353408d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3302 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 diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/icon_40pt.png b/openHAB/Images.xcassets/AppIcon.appiconset/icon_40pt.png deleted file mode 100644 index a018d991c15509fd77a6fbf0dad832311f21b91a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1990 zcmV;%2RZnOP)Px+fJsC_R9Fe6SV>G(XB0m7F&Rn)v{5NEDvDAXl_t{S*p+ceTxg80jGG!Ywg_n& z(^i%&OiW5!3tH%~(S@bZ1TDmYxUeoH!DypKQw&i-oaYhVd;Pxy-{ri^6*N7`yXX98 z{O&*B=RJG&EH3|p;_-p-AZJSGX@f4<9!UpVG9GV2DByYCutKAOK#d?c#*h<-^?PH0 zEM${e8OiYimI#0xHVcAn%OQha8z2+1_Xfg;p06q%)FUEHXZ6-TDnRSZB+yws({Q`zG&eUZSURp=y;@eST9wdyu(3A%z&$r)y3;Z#jYtjxxT>luIeYf3wx>>= zDw{TK5^#`>3zMlkckZ0j)z!(ZTemcB@#4j@apOimo_=aHdA%o3p7C-i?p`k%X2BQVL<&+~fkwy(ZT+ix)Koi5c zWy==dY-7S?-_Z%MTS`t&mh$p)T~yHT+qcgLX8kBDKsJz!$eWs)ge!3K=FK{+EM__U zL2<{Ud%u$Y-@n%!%oCOyJ-L4UdNuX-_R8_&$LW?Zipb#uv=~R8 zFJ8P*-SXwjl?Q#8&;?2VPhU&y&<5HLT(s_+L~v!*5>H8!*jt&yKuS}Mp98r_kXZvYS;zYL z`yhjGay)$aP@A}s&>37`#_ zkn!_}*cw>~VCks3062O7Bk>%#SaPcG=lj2%odDAN>lg9Cp)ojZ4wLmzWsqjfumh7~>M<{XBV$(S5mW884to&-n^w+6Y#{rmS-#2qpi zkG9`~EQ0Rmyuf`=g8;C;QsO5ERx5kXf@8cb0$ntHti&qZ@a7I2Z;_T?wI|_+TD&|E zAcvoMe1K3;IdkSr-9&Mi4=jisq2L%Z5?A1EPFj#jt-p!a{ja#ovRuA=87_Jlu)f9& z;?XOA(15GZq)C$`&D~nUdQMWu_%CB)wUT>Soi96((emArRQ;LTJo_Y?lP~|Yx9fEd zadYO((Qx?V$2pnI1lBNR$`tLn1aO5VBAqVm#VmGIh$`oQ!XC$6$A-h95qB zSb0uPj!c*^!H)+x3^gbLAQVWXzmB${VFft1TG4ZsSe$W|TiN6ah# z&_|8#k+4XpR31r^_@`A8cf;D%(<`;LwSrp?$tHv@xcUf+96pe-Gt|`7=v59|+PZb? zU>f$~s&tRgA*M0z4t{I{yLRmoTwt+hm6esrm@xxGO^}?>h@*}<$f3V|`?lZ{qNk@v z)c|KNBT(9S$l8NJ1KZ%(6Y=p4x^(H1R905X>C>kZ-k3?jg9IIVx81GSojZ3*cXzkC z;Hou${(L_V{en5X>({S4-OyEwb1A69_X94Lq@toCS+HP%ZV$MXfNTuf_{hiC+|i>) zg|`(9>)N$zHJ1L2MLSsE2S{gf1cBHFKY#wbey7~Habv*fo@r@mlAoWiAMN;vM{nWa z$8dIbcIsawbk5DqRdDdPgxst{J=>m}4^AE$8py%64eIObleV@tIdS5ISfKO?;}a)N z6l^7&D)1SphRxw!yLK%e?AF&wfC3mc%ttp(^bUzdgj~2n;cUgX3@*I@NJ89b_2>(( z0IA?xfm=B&A!4jgSbH>`wL=c05w{rz5QuGC-Dq-{-RhV(j4MF&kR=2|hY26ndp0>` za^#^*ZgoK!?U88MQOBg@07-(5FGD+Ql*vcaG2iR(VMELyTg(;=0=9l(GISgT=6)0Y YAH*T+EGTz0KmY&$07*qoM6N<$g8y^X)&Kwi diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png b/openHAB/Images.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png deleted file mode 100644 index b5b0747997006d6142e6a0b0d4a73335c717c2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5116 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 diff --git a/openHAB/Images.xcassets/AppIcon.appiconset/icon_76pt@2x.png b/openHAB/Images.xcassets/AppIcon.appiconset/icon_76pt@2x.png deleted file mode 100644 index 0e0fdd2f07627b913fdd3ff5757c47aba6318e93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13764 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 Q-23bdprmH+?% From b6a17f3465e15db8252b8f955ab135da2f29c211 Mon Sep 17 00:00:00 2001 From: Dan Cunningham Date: Sat, 10 Dec 2022 14:37:25 -0800 Subject: [PATCH 06/20] Appends slash to saved URL to avoid 404 on default routes using myopenHAB (#701) * Appends slash to saved URL to avoid 404 on default routes using myopenHAB Fixes #700 Signed-off-by: Dan Cunningham * committed version bump: 2.4.57 (1580410533) Signed-off-by: runner Signed-off-by: Dan Cunningham Signed-off-by: runner Co-authored-by: openhab-bot --- openHAB.xcodeproj/project.pbxproj | 20 ++++++++++---------- openHAB/OpenHABWebViewController.swift | 3 ++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/openHAB.xcodeproj/project.pbxproj b/openHAB.xcodeproj/project.pbxproj index f9fcea261..154c786f3 100644 --- a/openHAB.xcodeproj/project.pbxproj +++ b/openHAB.xcodeproj/project.pbxproj @@ -1517,7 +1517,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1560,7 +1560,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1600,7 +1600,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1642,7 +1642,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1684,7 +1684,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; "CODE_SIGN_STYLE[sdk=*]" = Automatic; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_C_LANGUAGE_STANDARD = "compiler-default"; @@ -1729,7 +1729,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_C_LANGUAGE_STANDARD = "compiler-default"; @@ -1771,7 +1771,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1814,7 +1814,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1968,7 +1968,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -2013,7 +2013,7 @@ CODE_SIGN_IDENTITY = "Apple Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1580410532; + CURRENT_PROJECT_VERSION = 1580410533; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = PBAPXHRAM9; GCC_PRECOMPILE_PREFIX_HEADER = YES; diff --git a/openHAB/OpenHABWebViewController.swift b/openHAB/OpenHABWebViewController.swift index fb8a6a377..db02ae507 100644 --- a/openHAB/OpenHABWebViewController.swift +++ b/openHAB/OpenHABWebViewController.swift @@ -73,7 +73,8 @@ class OpenHABWebViewController: OpenHABViewController { let url = URL(string: webviewURL.path, relativeTo: URL(string: self.openHABTrackedRootUrl)) if let path = url?.path { os_log("navigation change base: %{PUBLIC}@ path: %{PUBLIC}@", log: OSLog.default, type: .info, self.openHABTrackedRootUrl, path) - self.appData?.currentWebViewPath = path + // append trailing slash as WebUI/Vue/F7 will try and issue a 302 if the url is navigated to directly, this can be problamatic on myopenHAB + self.appData?.currentWebViewPath = path.hasSuffix("/") ? path : path + "/" } } } From 691670b7260083259afe37d9d963c3454259955e Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Thu, 29 Dec 2022 16:17:01 +0100 Subject: [PATCH 07/20] refs #609 (#675) --- OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift index aedc37403..42bc7ab0b 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift @@ -108,7 +108,7 @@ public class OpenHABWidget: NSObject, MKAnnotation, Identifiable { // Text between square brackets public var labelValue: String? { // Swift 5 raw strings - let regex = try? NSRegularExpression(pattern: #"\[(.*?)\]"#, options: []) + let regex = try? NSRegularExpression(pattern: #"\[(.*?)\]"#, options: [.dotMatchesLineSeparators]) guard let match = regex?.firstMatch(in: label, options: [], range: NSRange(location: 0, length: (label as NSString).length)) else { return nil } guard let range = Range(match.range(at: 1), in: label) else { return nil } return String(label[range]) From 0558424b5136c6f4618cdbb18abbfe8237c29f1a Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Thu, 29 Dec 2022 16:44:28 +0100 Subject: [PATCH 08/20] Update pull_requests.yml Update to maxim-lobanov/setup-xcode@v1.5.1 --- .github/workflows/pull_requests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull_requests.yml b/.github/workflows/pull_requests.yml index 574f67d9b..fe62ff221 100644 --- a/.github/workflows/pull_requests.yml +++ b/.github/workflows/pull_requests.yml @@ -10,7 +10,7 @@ jobs: runs-on: macos-12 if: ${{ github.event.pull_request.draft == false }} steps: - - uses: maxim-lobanov/setup-xcode@v1.1 + - uses: maxim-lobanov/setup-xcode@v1.5.1 with: xcode-version: latest-stable From 87c58698cef89d1ef20f0367259e11e68ecf45d0 Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Thu, 29 Dec 2022 16:51:40 +0100 Subject: [PATCH 09/20] Update pull_requests.yml Update to maierj/fastlane-action@v3.0.0 --- .github/workflows/pull_requests.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pull_requests.yml b/.github/workflows/pull_requests.yml index fe62ff221..322aa9789 100644 --- a/.github/workflows/pull_requests.yml +++ b/.github/workflows/pull_requests.yml @@ -16,16 +16,18 @@ jobs: - uses: actions/checkout@v3 - - name: Install dependencies - run: | - bundle install --redownload - + - uses: actions/checkout@v3 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.0' + bundler-cache: true + - name: Fastlane unit tests env: LANG: en_US.UTF-8 LC_ALL: en_US.UTF-8 FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 60 - uses: maierj/fastlane-action@v2.0.1 + uses: maierj/fastlane-action@v3.0.0 with: lane: unittests skip-tracking: true From c14bcb3cc935289e85c320305ff0d3d78f5debe4 Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Thu, 29 Dec 2022 18:06:34 +0100 Subject: [PATCH 10/20] Update pull_requests.yml Bug fixing --- .github/workflows/pull_requests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pull_requests.yml b/.github/workflows/pull_requests.yml index 322aa9789..71e07b416 100644 --- a/.github/workflows/pull_requests.yml +++ b/.github/workflows/pull_requests.yml @@ -30,4 +30,3 @@ jobs: uses: maierj/fastlane-action@v3.0.0 with: lane: unittests - skip-tracking: true From 6115f1cc4e2548b33e889cd038ccdfbffee314b1 Mon Sep 17 00:00:00 2001 From: weakfl Date: Tue, 3 Jan 2023 10:31:09 +0100 Subject: [PATCH 11/20] update build tool plugins (#704) Signed-off-by: weak Signed-off-by: weak --- .github/workflows/pull_requests.yml | 12 +- .swiftlint.yml | 1 - .../OpenHABCore/Model/DataExtension.swift | 2 +- .../OpenHABCore/Model/DataObject.swift | 2 +- .../OpenHABCore/Model/NumberState.swift | 2 +- .../OpenHABCore/Model/OpenHABItem.swift | 2 +- .../OpenHABCore/Model/OpenHABLinkedPage.swift | 2 +- .../OpenHABCore/Model/OpenHABOptions.swift | 2 +- .../Model/OpenHABServerProperties.swift | 2 +- .../OpenHABCore/Model/OpenHABSitemap.swift | 2 +- .../Model/OpenHABSitemapPage.swift | 2 +- .../Model/OpenHABStateDescription.swift | 2 +- .../OpenHABCore/Model/OpenHABUiTile.swift | 2 +- .../OpenHABCore/Model/OpenHABWidget.swift | 2 +- .../Model/OpenHABWidgetMapping.swift | 2 +- .../OpenHABCore/Model/Sequence+KeyPath.swift | 2 +- .../Util/ClientCertificateManager.swift | 2 +- .../Util/Collection+SafeAccess.swift | 2 +- .../Util/DateFormatterExtension.swift | 2 +- .../OpenHABCore/Util/DoubleExtension.swift | 2 +- .../Sources/OpenHABCore/Util/Endpoint.swift | 2 +- .../Sources/OpenHABCore/Util/Equatable.swift | 2 +- .../Sources/OpenHABCore/Util/Future.swift | 2 +- ...edDecodingContainerProtocolExtension.swift | 2 +- .../OpenHABCore/Util/NetworkConnection.swift | 2 +- .../OpenHABCore/Util/OSLogExtension.swift | 2 +- .../Util/OpenHABAccessTokenAdapter.swift | 2 +- .../OpenHABCore/Util/OpenHABItemCache.swift | 2 +- .../OpenHABCore/Util/OpenHABLogger.swift | 2 +- .../Util/OpenHABSessionDelegate.swift | 3 +- .../OpenHABCore/Util/Preferences.swift | 2 +- .../Util/ServerCertificateManager.swift | 2 +- .../OpenHABCore/Util/StringExtension.swift | 2 +- .../OpenHABCore/Util/UIColorExtension.swift | 2 +- .../Util/UnknownCaseRepresentable.swift | 2 +- .../OpenHABCoreTests/ItemCacheTests.swift | 2 +- .../Tests/OpenHABCoreTests/JSONData.swift | 2 +- .../OpenHABCoreTests/JSONParserTests.swift | 2 +- .../OpenHABCoreTests/MockURLProtocol.swift | 2 +- .../OpenHABCoreTests/NumberStateTests.swift | 2 +- .../OpenHABCoreGeneralTests.swift | 2 +- .../Tests/OpenHABCoreTests/ParseAsTests.swift | 2 +- .../Tests/OpenHABCoreTests/RESTAPITests.swift | 2 +- .../OpenHABCoreTests/UserDefaultsTests.swift | 2 +- .../Tests/OpenHABCoreTests/XMLData.swift | 2 +- .../OpenHABCoreTests/XMLParserTests.swift | 2 +- fastlane/Fastfile | 8 +- fastlane/SnapshotHelper.swift | 11 -- openHAB.xcodeproj/project.pbxproj | 106 +++++++++--------- .../xcshareddata/swiftpm/Package.resolved | 10 +- openHAB/AppDelegate.swift | 2 +- openHAB/ColorPickerUITableViewCell.swift | 2 +- openHAB/ColorPickerViewController.swift | 3 +- openHAB/DrawerUITableViewCell.swift | 2 +- openHAB/DynamicButtonStyleBell.swift | 2 +- openHAB/DynamicButtonStyleGear.swift | 2 +- openHAB/FrameUITableViewCell.swift | 2 +- openHAB/GenericUITableViewCell.swift | 2 +- openHAB/MapViewTableViewCell.swift | 2 +- openHAB/MulticastDelegate.swift | 2 +- openHAB/NewImageTableViewCell.swift | 2 +- openHAB/NewImageUITableViewCell.swift | 2 +- openHAB/NotificationTableViewCell.swift | 2 +- ...nHABClientCertificatesViewController.swift | 2 +- openHAB/OpenHABDataObject.swift | 2 +- openHAB/OpenHABDrawerItem.swift | 2 +- .../OpenHABDrawerTableViewController.swift | 2 +- openHAB/OpenHABLegalViewController.swift | 2 +- openHAB/OpenHABNotification.swift | 2 +- .../OpenHABNotificationsViewController.swift | 2 +- openHAB/OpenHABRootViewController.swift | 2 +- .../OpenHABSelectionTableViewController.swift | 3 +- openHAB/OpenHABSettingsViewController.swift | 2 +- openHAB/OpenHABSitemapViewController.swift | 2 +- openHAB/OpenHABTracker.swift | 5 +- openHAB/OpenHABViewController.swift | 2 +- openHAB/OpenHABWebViewController.swift | 2 +- openHAB/PlayerView.swift | 2 +- openHAB/ReusableView.swift | 2 +- openHAB/RollershutterUITableViewCell.swift | 2 +- openHAB/ScaleAspectFitImageView.swift | 2 +- openHAB/ScaledHeightUIImageView.swift | 2 +- openHAB/SegmentedUITableViewCell.swift | 2 +- openHAB/SelectionUITableViewCell.swift | 2 +- openHAB/SetpointUITableViewCell.swift | 2 +- openHAB/SliderUITableViewCell.swift | 2 +- openHAB/SpinnerViewController.swift | 2 +- openHAB/SwitchUITableViewCell.swift | 2 +- openHAB/Throttler.swift | 2 +- openHAB/UIAlertView+Block.swift | 2 +- openHAB/UICircleButton.swift | 2 +- openHAB/UILabel+Localization.swift | 2 +- openHAB/UITableView.swift | 2 +- openHAB/UIViewController+Localization.swift | 2 +- openHAB/URL+Static.swift | 2 +- openHAB/VideoUITableViewCell.swift | 2 +- openHAB/WatchMessageService.swift | 2 +- openHAB/WebUITableViewCell.swift | 2 +- .../GetItemStateIntentHandler.swift | 2 +- openHABIntents/IntentHandler.swift | 2 +- .../SetColorValueIntentHandler.swift | 2 +- .../SetContactStateValueIntentHandler.swift | 2 +- .../SetDimmerRollerValueIntentHandler.swift | 2 +- .../SetNumberValueIntentHandler.swift | 2 +- .../SetStringValueIntentHandler.swift | 2 +- .../SetSwitchStateIntentHandler.swift | 2 +- openHABTestsSwift/LocalizationTests.swift | 2 +- openHABTestsSwift/OpenHABEndPoint.swift | 2 +- openHABTestsSwift/OpenHABGeneralTests.swift | 2 +- .../OpenHABJSONParserTests.swift | 2 +- openHABTestsSwift/OpenHABSVGTests.swift | 2 +- openHABTestsSwift/OpenHABWatchTests.swift | 2 +- openHABTestsSwift/XCTestCaseExtension.swift | 2 +- openHABUITests/OpenHABUITests.swift | 2 +- .../ComplicationController.swift | 2 +- .../ExtensionDelegate.swift | 2 +- .../HostingController.swift | 2 +- .../NotificationController.swift | 2 +- openHABWatch Extension/NotificationView.swift | 2 +- .../OpenHABWatchTracker.swift | 2 +- .../PreferencesHostingController.swift | 2 +- .../UserDefaultsExtension.swift | 2 +- .../Views/ContentView.swift | 2 +- .../Views/PreferencesSwiftUIView.swift | 2 +- .../Views/Rows/ColorPickerRow.swift | 2 +- .../Views/Rows/FrameRow.swift | 2 +- .../Views/Rows/GenericRow.swift | 2 +- .../Views/Rows/ImageRawRow.swift | 2 +- .../Views/Rows/ImageRow.swift | 2 +- .../Views/Rows/MapViewRow.swift | 2 +- .../Views/Rows/PreferencesRowUIView.swift | 2 +- .../Views/Rows/RollershutterRow.swift | 2 +- .../Views/Rows/SegmentRow.swift | 2 +- .../Views/Rows/SetpointRow.swift | 2 +- .../Views/Rows/SliderRow.swift | 2 +- .../Views/Rows/SwitchRow.swift | 2 +- .../Views/Utils/Color+Extension.swift | 2 +- .../Views/Utils/ColorSelection.swift | 2 +- .../Views/Utils/DetailTextLabelView.swift | 2 +- .../Views/Utils/EncircledIconWithAction.swift | 2 +- .../Views/Utils/IconView.swift | 2 +- .../Views/Utils/MapView.swift | 2 +- .../Views/Utils/PreviewConstants.swift | 2 +- .../Views/Utils/TextLabelView.swift | 2 +- .../Views/Utils/Unwrap.swift | 2 +- .../ButtonTableRowController.swift | 2 +- .../ComplicationController.swift | 2 +- .../ExtensionDelegate.swift | 2 +- .../InterfaceController.swift | 2 +- .../Model/LazyView.swift | 2 +- .../Model/ObservableOpenHABDataObject.swift | 2 +- .../Model/ObservableOpenHABSitemapPage.swift | 2 +- .../Model/ObservableOpenHABWidget.swift | 2 +- .../ObservableOpenHABWidgetExtension.swift | 2 +- .../Model/UserDefaultsBacked.swift | 2 +- .../NotificationController.swift | 2 +- .../PrefsInterfaceController.swift | 2 +- .../openHABWatch Extension/UserData.swift | 2 +- .../UserDefaultsExtension.swift | 2 +- .../openHABWatch Extension/app/AppState.swift | 2 +- .../external/AppMessageService.swift | 2 +- .../external/OpenHabService.swift | 2 +- 162 files changed, 228 insertions(+), 238 deletions(-) diff --git a/.github/workflows/pull_requests.yml b/.github/workflows/pull_requests.yml index 71e07b416..5ab4818bf 100644 --- a/.github/workflows/pull_requests.yml +++ b/.github/workflows/pull_requests.yml @@ -16,17 +16,15 @@ jobs: - uses: actions/checkout@v3 - - uses: actions/checkout@v3 - - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.0' - bundler-cache: true - + - name: Install dependencies + run: | + bundle install --redownload + - name: Fastlane unit tests env: LANG: en_US.UTF-8 LC_ALL: en_US.UTF-8 FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 60 - uses: maierj/fastlane-action@v3.0.0 + uses: maierj/fastlane-action@v2.3.0 with: lane: unittests diff --git a/.swiftlint.yml b/.swiftlint.yml index 54404646e..d9cc6f35e 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -3,7 +3,6 @@ opt_in_rules: - empty_count - redundant_type_annotation - trailing_closure - - unused_import - implicit_return - multiline_function_chains - anyobject_protocol diff --git a/OpenHABCore/Sources/OpenHABCore/Model/DataExtension.swift b/OpenHABCore/Sources/OpenHABCore/Model/DataExtension.swift index af1146d34..5e9c20c4e 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/DataExtension.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/DataExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/DataObject.swift b/OpenHABCore/Sources/OpenHABCore/Model/DataObject.swift index 82e8bad8c..0ac36900f 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/DataObject.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/DataObject.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/NumberState.swift b/OpenHABCore/Sources/OpenHABCore/Model/NumberState.swift index c5aca256e..9b906cc28 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/NumberState.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/NumberState.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABItem.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABItem.swift index 776dc1d74..3bdfd5b19 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABItem.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABItem.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABLinkedPage.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABLinkedPage.swift index 84f6ba694..58ac1639c 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABLinkedPage.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABLinkedPage.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABOptions.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABOptions.swift index 77d4be37d..5363ef993 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABOptions.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABOptions.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABServerProperties.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABServerProperties.swift index bc6cb2bec..21830cb6c 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABServerProperties.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABServerProperties.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABSitemap.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABSitemap.swift index e1681d6ef..05dfa09a5 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABSitemap.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABSitemap.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABSitemapPage.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABSitemapPage.swift index f205b8797..f0760b2a6 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABSitemapPage.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABSitemapPage.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABStateDescription.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABStateDescription.swift index ec2fbabad..ade7b2210 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABStateDescription.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABStateDescription.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABUiTile.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABUiTile.swift index 4a04c4b4c..3e602a331 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABUiTile.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABUiTile.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift index 42bc7ab0b..94c62dcb1 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidgetMapping.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidgetMapping.swift index 6b2199716..373014c09 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidgetMapping.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidgetMapping.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Model/Sequence+KeyPath.swift b/OpenHABCore/Sources/OpenHABCore/Model/Sequence+KeyPath.swift index 4064413c6..a2d24ed34 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/Sequence+KeyPath.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/Sequence+KeyPath.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/ClientCertificateManager.swift b/OpenHABCore/Sources/OpenHABCore/Util/ClientCertificateManager.swift index 9dedf6e5e..78dd94dd1 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/ClientCertificateManager.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/ClientCertificateManager.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/Collection+SafeAccess.swift b/OpenHABCore/Sources/OpenHABCore/Util/Collection+SafeAccess.swift index 19fa2f0f6..8e29a4e9d 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/Collection+SafeAccess.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/Collection+SafeAccess.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/DateFormatterExtension.swift b/OpenHABCore/Sources/OpenHABCore/Util/DateFormatterExtension.swift index 89d24e1b7..57005ac18 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/DateFormatterExtension.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/DateFormatterExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/DoubleExtension.swift b/OpenHABCore/Sources/OpenHABCore/Util/DoubleExtension.swift index 1850086ab..7cbee9994 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/DoubleExtension.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/DoubleExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift b/OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift index 2f80ad0d8..8323cccb4 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/Equatable.swift b/OpenHABCore/Sources/OpenHABCore/Util/Equatable.swift index d1a8ebe5e..f67477fe5 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/Equatable.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/Equatable.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/Future.swift b/OpenHABCore/Sources/OpenHABCore/Util/Future.swift index b99c4c3d8..77a0080b2 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/Future.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/Future.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/KeyedDecodingContainerProtocolExtension.swift b/OpenHABCore/Sources/OpenHABCore/Util/KeyedDecodingContainerProtocolExtension.swift index 9ef78d856..151a4e446 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/KeyedDecodingContainerProtocolExtension.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/KeyedDecodingContainerProtocolExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/NetworkConnection.swift b/OpenHABCore/Sources/OpenHABCore/Util/NetworkConnection.swift index c29f0cb51..573b8f6f3 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/NetworkConnection.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/NetworkConnection.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/OSLogExtension.swift b/OpenHABCore/Sources/OpenHABCore/Util/OSLogExtension.swift index 39b12173d..da121d43e 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/OSLogExtension.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/OSLogExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/OpenHABAccessTokenAdapter.swift b/OpenHABCore/Sources/OpenHABCore/Util/OpenHABAccessTokenAdapter.swift index a7ae4d036..5b6b35231 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/OpenHABAccessTokenAdapter.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/OpenHABAccessTokenAdapter.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/OpenHABItemCache.swift b/OpenHABCore/Sources/OpenHABCore/Util/OpenHABItemCache.swift index 3792407ad..92aa6085d 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/OpenHABItemCache.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/OpenHABItemCache.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/OpenHABLogger.swift b/OpenHABCore/Sources/OpenHABCore/Util/OpenHABLogger.swift index bccb31f09..a78cd4148 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/OpenHABLogger.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/OpenHABLogger.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/OpenHABSessionDelegate.swift b/OpenHABCore/Sources/OpenHABCore/Util/OpenHABSessionDelegate.swift index b933f3d27..48b26251a 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/OpenHABSessionDelegate.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/OpenHABSessionDelegate.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. @@ -16,6 +16,7 @@ import Foundation // The alternative method is explained by jshier in https://github.com/Alamofire/Alamofire/issues/2886#issuecomment-517951747 class OpenHABSessionDelegate: SessionDelegate { + // swiftlint:disable:next large_tuple typealias ChallengeEvaluation = (disposition: URLSession.AuthChallengeDisposition, credential: URLCredential?, error: AFError?) var eventMonitor: EventMonitor? diff --git a/OpenHABCore/Sources/OpenHABCore/Util/Preferences.swift b/OpenHABCore/Sources/OpenHABCore/Util/Preferences.swift index a59e2a33b..66d86c0d2 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/Preferences.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/Preferences.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/ServerCertificateManager.swift b/OpenHABCore/Sources/OpenHABCore/Util/ServerCertificateManager.swift index 7b36f431a..a9aac69ed 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/ServerCertificateManager.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/ServerCertificateManager.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/StringExtension.swift b/OpenHABCore/Sources/OpenHABCore/Util/StringExtension.swift index b201b7493..cc8808b75 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/StringExtension.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/StringExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/UIColorExtension.swift b/OpenHABCore/Sources/OpenHABCore/Util/UIColorExtension.swift index f319a4139..bd9d6ceb0 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/UIColorExtension.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/UIColorExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Sources/OpenHABCore/Util/UnknownCaseRepresentable.swift b/OpenHABCore/Sources/OpenHABCore/Util/UnknownCaseRepresentable.swift index c24cf6957..281460ee3 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/UnknownCaseRepresentable.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/UnknownCaseRepresentable.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/ItemCacheTests.swift b/OpenHABCore/Tests/OpenHABCoreTests/ItemCacheTests.swift index 6d7505b2b..6a3b8f3d4 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/ItemCacheTests.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/ItemCacheTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/JSONData.swift b/OpenHABCore/Tests/OpenHABCoreTests/JSONData.swift index ed4398399..5cee6a181 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/JSONData.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/JSONData.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/JSONParserTests.swift b/OpenHABCore/Tests/OpenHABCoreTests/JSONParserTests.swift index 0534ad264..a52f5bf55 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/JSONParserTests.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/JSONParserTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/MockURLProtocol.swift b/OpenHABCore/Tests/OpenHABCoreTests/MockURLProtocol.swift index 3e611f809..652510ad2 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/MockURLProtocol.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/MockURLProtocol.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/NumberStateTests.swift b/OpenHABCore/Tests/OpenHABCoreTests/NumberStateTests.swift index 6e4d29349..cd44a8ca9 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/NumberStateTests.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/NumberStateTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/OpenHABCoreGeneralTests.swift b/OpenHABCore/Tests/OpenHABCoreTests/OpenHABCoreGeneralTests.swift index e5ec2f983..5b80d3f04 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/OpenHABCoreGeneralTests.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/OpenHABCoreGeneralTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/ParseAsTests.swift b/OpenHABCore/Tests/OpenHABCoreTests/ParseAsTests.swift index f9e250945..240c667b1 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/ParseAsTests.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/ParseAsTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/RESTAPITests.swift b/OpenHABCore/Tests/OpenHABCoreTests/RESTAPITests.swift index 97a69c568..0374856ae 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/RESTAPITests.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/RESTAPITests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/UserDefaultsTests.swift b/OpenHABCore/Tests/OpenHABCoreTests/UserDefaultsTests.swift index a71d815b8..9e290c514 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/UserDefaultsTests.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/UserDefaultsTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/XMLData.swift b/OpenHABCore/Tests/OpenHABCoreTests/XMLData.swift index 30750f53b..9dfc29031 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/XMLData.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/XMLData.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/OpenHABCore/Tests/OpenHABCoreTests/XMLParserTests.swift b/OpenHABCore/Tests/OpenHABCoreTests/XMLParserTests.swift index 7aefa1910..711411413 100644 --- a/OpenHABCore/Tests/OpenHABCoreTests/XMLParserTests.swift +++ b/OpenHABCore/Tests/OpenHABCoreTests/XMLParserTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 120fce128..d44df67b3 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -57,7 +57,7 @@ platform :ios do scheme: 'openHABTestsSwift', xcargs: '-skipPackagePluginValidation', testplan: 'openHABTests', - devices: ['iPhone 13 Pro'], + devices: ['iPhone 14 Pro'], clean: true ) end @@ -176,7 +176,7 @@ platform :ios do ) push_to_git_remote(tags: true) sh 'git checkout develop' - + if is_ci? set_github_release( api_bearer: ENV['FASTLANE_GITHUB_RELEASE_API_BEARER'], @@ -187,7 +187,7 @@ platform :ios do commitish: 'main' # upload_assets: no assets supported ) - else + else set_github_release( api_token: ENV['GITHUB_API_TOKEN'], repository_name: 'openhab/openhab-ios', @@ -198,7 +198,7 @@ platform :ios do # upload_assets: no assets supported ) end - + end end diff --git a/fastlane/SnapshotHelper.swift b/fastlane/SnapshotHelper.swift index 40ec58f99..e97caeeee 100644 --- a/fastlane/SnapshotHelper.swift +++ b/fastlane/SnapshotHelper.swift @@ -1,14 +1,3 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project -// -// See the NOTICE file(s) distributed with this work for additional -// information. -// -// This program and the accompanying materials are made available under the -// terms of the Eclipse Public License 2.0 which is available at -// http://www.eclipse.org/legal/epl-2.0 -// -// SPDX-License-Identifier: EPL-2.0 - // ----------------------------------------------------- // IMPORTANT: When modifying this file, make sure to // increment the version number at the very diff --git a/openHAB.xcodeproj/project.pbxproj b/openHAB.xcodeproj/project.pbxproj index 154c786f3..5177a8f57 100644 --- a/openHAB.xcodeproj/project.pbxproj +++ b/openHAB.xcodeproj/project.pbxproj @@ -1159,19 +1159,19 @@ ); mainGroup = DFB2621E18830A3600D3244D; packageReferences = ( - 937E4480270B378F00A98C26 /* XCRemoteSwiftPackageReference "Fuzi.git" */, - 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit.git" */, - 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher.git" */, - 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire.git" */, - 93F8063027AE6B940035A6B0 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator.git" */, - 93F8063327AE6C620035A6B0 /* XCRemoteSwiftPackageReference "firebase-ios-sdk.git" */, - 93F8064527AE7A050035A6B0 /* XCRemoteSwiftPackageReference "SwiftMessages.git" */, - 93F8064827AE7A2E0035A6B0 /* XCRemoteSwiftPackageReference "FlexColorPicker.git" */, - 93F8064B27AE7A4D0035A6B0 /* XCRemoteSwiftPackageReference "DynamicButton.git" */, - 93F8064E27AE7A820035A6B0 /* XCRemoteSwiftPackageReference "SideMenu.git" */, - 93F8065127AE7B580035A6B0 /* XCRemoteSwiftPackageReference "SVGKit.git" */, - 934E591C28F16E1600162004 /* XCRemoteSwiftPackageReference "SwiftFormatPlugin.git" */, - 934E591D28F16E8600162004 /* XCRemoteSwiftPackageReference "SwiftLintPlugin.git" */, + 937E4480270B378F00A98C26 /* XCRemoteSwiftPackageReference "Fuzi" */, + 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit" */, + 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher" */, + 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire" */, + 93F8063027AE6B940035A6B0 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator" */, + 93F8063327AE6C620035A6B0 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + 93F8064527AE7A050035A6B0 /* XCRemoteSwiftPackageReference "SwiftMessages" */, + 93F8064827AE7A2E0035A6B0 /* XCRemoteSwiftPackageReference "FlexColorPicker" */, + 93F8064B27AE7A4D0035A6B0 /* XCRemoteSwiftPackageReference "DynamicButton" */, + 93F8064E27AE7A820035A6B0 /* XCRemoteSwiftPackageReference "SideMenu" */, + 93F8065127AE7B580035A6B0 /* XCRemoteSwiftPackageReference "SVGKit" */, + 934E591C28F16E1600162004 /* XCRemoteSwiftPackageReference "SwiftFormatPlugin" */, + 934E591D28F16E8600162004 /* XCRemoteSwiftPackageReference "SwiftLintPlugin" */, ); productRefGroup = DFB2622818830A3600D3244D /* Products */; projectDirPath = ""; @@ -1422,11 +1422,11 @@ }; 934E592128F16E9600162004 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - productRef = 934E592028F16E9600162004 /* plugin:SwiftLintPlugin */; + productRef = 934E592028F16E9600162004 /* SwiftLintPlugin */; }; 934E592328F16E9E00162004 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - productRef = 934E592228F16E9E00162004 /* plugin:SwiftFormatPlugin */; + productRef = 934E592228F16E9E00162004 /* SwiftFormatPlugin */; }; DA07753A2346705F0086C685 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -2106,7 +2106,7 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 934E591C28F16E1600162004 /* XCRemoteSwiftPackageReference "SwiftFormatPlugin.git" */ = { + 934E591C28F16E1600162004 /* XCRemoteSwiftPackageReference "SwiftFormatPlugin" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/weakfl/SwiftFormatPlugin.git"; requirement = { @@ -2114,15 +2114,15 @@ minimumVersion = 0.50.1; }; }; - 934E591D28F16E8600162004 /* XCRemoteSwiftPackageReference "SwiftLintPlugin.git" */ = { + 934E591D28F16E8600162004 /* XCRemoteSwiftPackageReference "SwiftLintPlugin" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/weakfl/SwiftLintPlugin.git"; requirement = { - branch = main; - kind = branch; + kind = upToNextMajorVersion; + minimumVersion = 0.50.3; }; }; - 937E4480270B378F00A98C26 /* XCRemoteSwiftPackageReference "Fuzi.git" */ = { + 937E4480270B378F00A98C26 /* XCRemoteSwiftPackageReference "Fuzi" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/cezheng/Fuzi.git"; requirement = { @@ -2130,7 +2130,7 @@ minimumVersion = 3.0.0; }; }; - 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit.git" */ = { + 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/devicekit/DeviceKit.git"; requirement = { @@ -2138,7 +2138,7 @@ minimumVersion = 4.0.0; }; }; - 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher.git" */ = { + 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/onevcat/Kingfisher.git"; requirement = { @@ -2146,7 +2146,7 @@ minimumVersion = 7.0.0; }; }; - 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire.git" */ = { + 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Alamofire/Alamofire.git"; requirement = { @@ -2154,7 +2154,7 @@ version = 5.4.4; }; }; - 93F8063027AE6B940035A6B0 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator.git" */ = { + 93F8063027AE6B940035A6B0 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Alamofire/AlamofireNetworkActivityIndicator.git"; requirement = { @@ -2162,7 +2162,7 @@ minimumVersion = 3.0.0; }; }; - 93F8063327AE6C620035A6B0 /* XCRemoteSwiftPackageReference "firebase-ios-sdk.git" */ = { + 93F8063327AE6C620035A6B0 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; requirement = { @@ -2170,7 +2170,7 @@ minimumVersion = 8.0.0; }; }; - 93F8064527AE7A050035A6B0 /* XCRemoteSwiftPackageReference "SwiftMessages.git" */ = { + 93F8064527AE7A050035A6B0 /* XCRemoteSwiftPackageReference "SwiftMessages" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/SwiftKickMobile/SwiftMessages.git"; requirement = { @@ -2178,7 +2178,7 @@ minimumVersion = 9.0.0; }; }; - 93F8064827AE7A2E0035A6B0 /* XCRemoteSwiftPackageReference "FlexColorPicker.git" */ = { + 93F8064827AE7A2E0035A6B0 /* XCRemoteSwiftPackageReference "FlexColorPicker" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/RastislavMirek/FlexColorPicker.git"; requirement = { @@ -2186,7 +2186,7 @@ minimumVersion = 1.0.0; }; }; - 93F8064B27AE7A4D0035A6B0 /* XCRemoteSwiftPackageReference "DynamicButton.git" */ = { + 93F8064B27AE7A4D0035A6B0 /* XCRemoteSwiftPackageReference "DynamicButton" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/yannickl/DynamicButton.git"; requirement = { @@ -2194,7 +2194,7 @@ minimumVersion = 6.0.0; }; }; - 93F8064E27AE7A820035A6B0 /* XCRemoteSwiftPackageReference "SideMenu.git" */ = { + 93F8064E27AE7A820035A6B0 /* XCRemoteSwiftPackageReference "SideMenu" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/jonkykong/SideMenu.git"; requirement = { @@ -2202,7 +2202,7 @@ minimumVersion = 6.0.0; }; }; - 93F8065127AE7B580035A6B0 /* XCRemoteSwiftPackageReference "SVGKit.git" */ = { + 93F8065127AE7B580035A6B0 /* XCRemoteSwiftPackageReference "SVGKit" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/SVGKit/SVGKit.git"; requirement = { @@ -2213,14 +2213,14 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 934E592028F16E9600162004 /* plugin:SwiftLintPlugin */ = { + 934E592028F16E9600162004 /* SwiftLintPlugin */ = { isa = XCSwiftPackageProductDependency; - package = 934E591D28F16E8600162004 /* XCRemoteSwiftPackageReference "SwiftLintPlugin.git" */; + package = 934E591D28F16E8600162004 /* XCRemoteSwiftPackageReference "SwiftLintPlugin" */; productName = "plugin:SwiftLintPlugin"; }; - 934E592228F16E9E00162004 /* plugin:SwiftFormatPlugin */ = { + 934E592228F16E9E00162004 /* SwiftFormatPlugin */ = { isa = XCSwiftPackageProductDependency; - package = 934E591C28F16E1600162004 /* XCRemoteSwiftPackageReference "SwiftFormatPlugin.git" */; + package = 934E591C28F16E1600162004 /* XCRemoteSwiftPackageReference "SwiftFormatPlugin" */; productName = "plugin:SwiftFormatPlugin"; }; 934E592428F16EBA00162004 /* OpenHABCore */ = { @@ -2229,17 +2229,17 @@ }; 934E592628F16EBA00162004 /* Kingfisher */ = { isa = XCSwiftPackageProductDependency; - package = 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher.git" */; + package = 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher" */; productName = Kingfisher; }; 934E592828F16EBA00162004 /* DeviceKit */ = { isa = XCSwiftPackageProductDependency; - package = 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit.git" */; + package = 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit" */; productName = DeviceKit; }; 934E592A28F16EBA00162004 /* Alamofire */ = { isa = XCSwiftPackageProductDependency; - package = 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire.git" */; + package = 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire" */; productName = Alamofire; }; 937E4470270B36D000A98C26 /* OpenHABCore */ = { @@ -2252,37 +2252,37 @@ }; 937E4481270B378F00A98C26 /* Fuzi */ = { isa = XCSwiftPackageProductDependency; - package = 937E4480270B378F00A98C26 /* XCRemoteSwiftPackageReference "Fuzi.git" */; + package = 937E4480270B378F00A98C26 /* XCRemoteSwiftPackageReference "Fuzi" */; productName = Fuzi; }; 937E4484270B379900A98C26 /* DeviceKit */ = { isa = XCSwiftPackageProductDependency; - package = 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit.git" */; + package = 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit" */; productName = DeviceKit; }; 937E4487270B37A600A98C26 /* Kingfisher */ = { isa = XCSwiftPackageProductDependency; - package = 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher.git" */; + package = 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher" */; productName = Kingfisher; }; 937E448B270B37CA00A98C26 /* Kingfisher */ = { isa = XCSwiftPackageProductDependency; - package = 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher.git" */; + package = 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher" */; productName = Kingfisher; }; 937E448D270B37D200A98C26 /* DeviceKit */ = { isa = XCSwiftPackageProductDependency; - package = 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit.git" */; + package = 937E4483270B379900A98C26 /* XCRemoteSwiftPackageReference "DeviceKit" */; productName = DeviceKit; }; 937E4491270B37FE00A98C26 /* Kingfisher */ = { isa = XCSwiftPackageProductDependency; - package = 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher.git" */; + package = 937E4486270B37A600A98C26 /* XCRemoteSwiftPackageReference "Kingfisher" */; productName = Kingfisher; }; 937E4493270B380500A98C26 /* Fuzi */ = { isa = XCSwiftPackageProductDependency; - package = 937E4480270B378F00A98C26 /* XCRemoteSwiftPackageReference "Fuzi.git" */; + package = 937E4480270B378F00A98C26 /* XCRemoteSwiftPackageReference "Fuzi" */; productName = Fuzi; }; 937E44E1270B393C00A98C26 /* OpenHABCore */ = { @@ -2291,47 +2291,47 @@ }; 93F8061A27AE615D0035A6B0 /* Alamofire */ = { isa = XCSwiftPackageProductDependency; - package = 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire.git" */; + package = 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire" */; productName = Alamofire; }; 93F8062E27AE63620035A6B0 /* Alamofire */ = { isa = XCSwiftPackageProductDependency; - package = 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire.git" */; + package = 93F8061927AE615D0035A6B0 /* XCRemoteSwiftPackageReference "Alamofire" */; productName = Alamofire; }; 93F8063127AE6B940035A6B0 /* AlamofireNetworkActivityIndicator */ = { isa = XCSwiftPackageProductDependency; - package = 93F8063027AE6B940035A6B0 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator.git" */; + package = 93F8063027AE6B940035A6B0 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator" */; productName = AlamofireNetworkActivityIndicator; }; 93F8063427AE6C620035A6B0 /* FirebaseCrashlytics */ = { isa = XCSwiftPackageProductDependency; - package = 93F8063327AE6C620035A6B0 /* XCRemoteSwiftPackageReference "firebase-ios-sdk.git" */; + package = 93F8063327AE6C620035A6B0 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; productName = FirebaseCrashlytics; }; 93F8064627AE7A050035A6B0 /* SwiftMessages */ = { isa = XCSwiftPackageProductDependency; - package = 93F8064527AE7A050035A6B0 /* XCRemoteSwiftPackageReference "SwiftMessages.git" */; + package = 93F8064527AE7A050035A6B0 /* XCRemoteSwiftPackageReference "SwiftMessages" */; productName = SwiftMessages; }; 93F8064927AE7A2E0035A6B0 /* FlexColorPicker */ = { isa = XCSwiftPackageProductDependency; - package = 93F8064827AE7A2E0035A6B0 /* XCRemoteSwiftPackageReference "FlexColorPicker.git" */; + package = 93F8064827AE7A2E0035A6B0 /* XCRemoteSwiftPackageReference "FlexColorPicker" */; productName = FlexColorPicker; }; 93F8064C27AE7A4D0035A6B0 /* DynamicButton */ = { isa = XCSwiftPackageProductDependency; - package = 93F8064B27AE7A4D0035A6B0 /* XCRemoteSwiftPackageReference "DynamicButton.git" */; + package = 93F8064B27AE7A4D0035A6B0 /* XCRemoteSwiftPackageReference "DynamicButton" */; productName = DynamicButton; }; 93F8064F27AE7A830035A6B0 /* SideMenu */ = { isa = XCSwiftPackageProductDependency; - package = 93F8064E27AE7A820035A6B0 /* XCRemoteSwiftPackageReference "SideMenu.git" */; + package = 93F8064E27AE7A820035A6B0 /* XCRemoteSwiftPackageReference "SideMenu" */; productName = SideMenu; }; 93F8065227AE7B580035A6B0 /* SVGKit */ = { isa = XCSwiftPackageProductDependency; - package = 93F8065127AE7B580035A6B0 /* XCRemoteSwiftPackageReference "SVGKit.git" */; + package = 93F8065127AE7B580035A6B0 /* XCRemoteSwiftPackageReference "SVGKit" */; productName = SVGKit; }; /* End XCSwiftPackageProductDependency section */ diff --git a/openHAB.xcworkspace/xcshareddata/swiftpm/Package.resolved b/openHAB.xcworkspace/xcshareddata/swiftpm/Package.resolved index 6b34bcbf6..d6c4f01a7 100644 --- a/openHAB.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/openHAB.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -213,17 +213,17 @@ "repositoryURL": "https://github.com/weakfl/SwiftFormatPlugin.git", "state": { "branch": null, - "revision": "503a58bf51ee8b40cb53a83a84b13f3daf43ff42", - "version": "0.50.3" + "revision": "749f67e06cddc05bfbff8e1b1a17f2c4c8e150eb", + "version": "0.50.7" } }, { "package": "SwiftLintPlugin", "repositoryURL": "https://github.com/weakfl/SwiftLintPlugin.git", "state": { - "branch": "main", - "revision": "efa3f94160b65329b2a2596033e05cfe66286a23", - "version": null + "branch": null, + "revision": "8cbc2433be11093a4c9c243eafc101cb5ada820b", + "version": "0.50.3" } }, { diff --git a/openHAB/AppDelegate.swift b/openHAB/AppDelegate.swift index 3794c8527..d17d186a5 100644 --- a/openHAB/AppDelegate.swift +++ b/openHAB/AppDelegate.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/ColorPickerUITableViewCell.swift b/openHAB/ColorPickerUITableViewCell.swift index c5996a3fd..7b7433b2c 100644 --- a/openHAB/ColorPickerUITableViewCell.swift +++ b/openHAB/ColorPickerUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/ColorPickerViewController.swift b/openHAB/ColorPickerViewController.swift index b315438ec..a5cdbc22b 100644 --- a/openHAB/ColorPickerViewController.swift +++ b/openHAB/ColorPickerViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. @@ -62,6 +62,7 @@ class ColorPickerViewController: DefaultColorPickerViewController { } func sendColorUpdate(color: UIColor) { + // swiftlint:disable:next large_tuple var (hue, saturation, brightness, alpha): (CGFloat, CGFloat, CGFloat, CGFloat) = (0.0, 0.0, 0.0, 0.0) color.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) diff --git a/openHAB/DrawerUITableViewCell.swift b/openHAB/DrawerUITableViewCell.swift index 0b4cffc13..2ebb6a2f8 100644 --- a/openHAB/DrawerUITableViewCell.swift +++ b/openHAB/DrawerUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/DynamicButtonStyleBell.swift b/openHAB/DynamicButtonStyleBell.swift index 84188fed7..f7571722e 100644 --- a/openHAB/DynamicButtonStyleBell.swift +++ b/openHAB/DynamicButtonStyleBell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/DynamicButtonStyleGear.swift b/openHAB/DynamicButtonStyleGear.swift index 33f218fd3..5610aa135 100644 --- a/openHAB/DynamicButtonStyleGear.swift +++ b/openHAB/DynamicButtonStyleGear.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/FrameUITableViewCell.swift b/openHAB/FrameUITableViewCell.swift index 0ce64315d..ee76ab09e 100644 --- a/openHAB/FrameUITableViewCell.swift +++ b/openHAB/FrameUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/GenericUITableViewCell.swift b/openHAB/GenericUITableViewCell.swift index f66a6de97..d4d58a362 100644 --- a/openHAB/GenericUITableViewCell.swift +++ b/openHAB/GenericUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/MapViewTableViewCell.swift b/openHAB/MapViewTableViewCell.swift index 636e09134..906444d24 100644 --- a/openHAB/MapViewTableViewCell.swift +++ b/openHAB/MapViewTableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/MulticastDelegate.swift b/openHAB/MulticastDelegate.swift index c1c3e233e..f7a6033cc 100644 --- a/openHAB/MulticastDelegate.swift +++ b/openHAB/MulticastDelegate.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/NewImageTableViewCell.swift b/openHAB/NewImageTableViewCell.swift index 57c6695b2..15f8640ba 100644 --- a/openHAB/NewImageTableViewCell.swift +++ b/openHAB/NewImageTableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/NewImageUITableViewCell.swift b/openHAB/NewImageUITableViewCell.swift index 3c26b482e..b536369b9 100644 --- a/openHAB/NewImageUITableViewCell.swift +++ b/openHAB/NewImageUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/NotificationTableViewCell.swift b/openHAB/NotificationTableViewCell.swift index 99478dccf..6d666e604 100644 --- a/openHAB/NotificationTableViewCell.swift +++ b/openHAB/NotificationTableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABClientCertificatesViewController.swift b/openHAB/OpenHABClientCertificatesViewController.swift index 754428490..9e1837282 100644 --- a/openHAB/OpenHABClientCertificatesViewController.swift +++ b/openHAB/OpenHABClientCertificatesViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABDataObject.swift b/openHAB/OpenHABDataObject.swift index a0c332269..d264f5c6d 100644 --- a/openHAB/OpenHABDataObject.swift +++ b/openHAB/OpenHABDataObject.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABDrawerItem.swift b/openHAB/OpenHABDrawerItem.swift index 3d949e7da..efb620570 100644 --- a/openHAB/OpenHABDrawerItem.swift +++ b/openHAB/OpenHABDrawerItem.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABDrawerTableViewController.swift b/openHAB/OpenHABDrawerTableViewController.swift index 4030eb1d5..c912082c5 100644 --- a/openHAB/OpenHABDrawerTableViewController.swift +++ b/openHAB/OpenHABDrawerTableViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABLegalViewController.swift b/openHAB/OpenHABLegalViewController.swift index e6470ef00..9aa1ec601 100644 --- a/openHAB/OpenHABLegalViewController.swift +++ b/openHAB/OpenHABLegalViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABNotification.swift b/openHAB/OpenHABNotification.swift index 1185c4f48..d4eecb580 100644 --- a/openHAB/OpenHABNotification.swift +++ b/openHAB/OpenHABNotification.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABNotificationsViewController.swift b/openHAB/OpenHABNotificationsViewController.swift index 27281631c..1f604b87c 100644 --- a/openHAB/OpenHABNotificationsViewController.swift +++ b/openHAB/OpenHABNotificationsViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABRootViewController.swift b/openHAB/OpenHABRootViewController.swift index 902a8bceb..9d1f95f0c 100644 --- a/openHAB/OpenHABRootViewController.swift +++ b/openHAB/OpenHABRootViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABSelectionTableViewController.swift b/openHAB/OpenHABSelectionTableViewController.swift index cfec3c6d2..e3bc64820 100644 --- a/openHAB/OpenHABSelectionTableViewController.swift +++ b/openHAB/OpenHABSelectionTableViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. @@ -13,6 +13,7 @@ import OpenHABCore import os.log import UIKit +// swiftlint:disable:next type_name public protocol OpenHABSelectionTableViewControllerDelegate: NSObjectProtocol { func didSelectWidgetMapping(_ selectedMapping: Int) } diff --git a/openHAB/OpenHABSettingsViewController.swift b/openHAB/OpenHABSettingsViewController.swift index 24a03e5e6..b7b9e5fba 100644 --- a/openHAB/OpenHABSettingsViewController.swift +++ b/openHAB/OpenHABSettingsViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABSitemapViewController.swift b/openHAB/OpenHABSitemapViewController.swift index 62a8a4fa4..900991c19 100644 --- a/openHAB/OpenHABSitemapViewController.swift +++ b/openHAB/OpenHABSitemapViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABTracker.swift b/openHAB/OpenHABTracker.swift index b6e20df00..78654afe3 100644 --- a/openHAB/OpenHABTracker.swift +++ b/openHAB/OpenHABTracker.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. @@ -47,7 +47,8 @@ class OpenHABTracker: NSObject { start() } - @objc func restart() { + @objc + func restart() { reach?.stopListening() start() } diff --git a/openHAB/OpenHABViewController.swift b/openHAB/OpenHABViewController.swift index 1097152e6..22cb97ae3 100644 --- a/openHAB/OpenHABViewController.swift +++ b/openHAB/OpenHABViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/OpenHABWebViewController.swift b/openHAB/OpenHABWebViewController.swift index db02ae507..9b9b1b047 100644 --- a/openHAB/OpenHABWebViewController.swift +++ b/openHAB/OpenHABWebViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/PlayerView.swift b/openHAB/PlayerView.swift index f3eb7a37c..116385481 100644 --- a/openHAB/PlayerView.swift +++ b/openHAB/PlayerView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/ReusableView.swift b/openHAB/ReusableView.swift index fccd63052..b0e726c11 100644 --- a/openHAB/ReusableView.swift +++ b/openHAB/ReusableView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/RollershutterUITableViewCell.swift b/openHAB/RollershutterUITableViewCell.swift index 1f8c5219b..7b472877d 100644 --- a/openHAB/RollershutterUITableViewCell.swift +++ b/openHAB/RollershutterUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/ScaleAspectFitImageView.swift b/openHAB/ScaleAspectFitImageView.swift index 206c6793a..2e3f33e42 100644 --- a/openHAB/ScaleAspectFitImageView.swift +++ b/openHAB/ScaleAspectFitImageView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/ScaledHeightUIImageView.swift b/openHAB/ScaledHeightUIImageView.swift index 52a86b0ba..442111dbf 100644 --- a/openHAB/ScaledHeightUIImageView.swift +++ b/openHAB/ScaledHeightUIImageView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/SegmentedUITableViewCell.swift b/openHAB/SegmentedUITableViewCell.swift index 33a68d394..26bc3c03f 100644 --- a/openHAB/SegmentedUITableViewCell.swift +++ b/openHAB/SegmentedUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/SelectionUITableViewCell.swift b/openHAB/SelectionUITableViewCell.swift index 3e4aecded..5a9f21013 100644 --- a/openHAB/SelectionUITableViewCell.swift +++ b/openHAB/SelectionUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/SetpointUITableViewCell.swift b/openHAB/SetpointUITableViewCell.swift index 85b3636cf..cd89e2b78 100644 --- a/openHAB/SetpointUITableViewCell.swift +++ b/openHAB/SetpointUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/SliderUITableViewCell.swift b/openHAB/SliderUITableViewCell.swift index 1f81d5c34..e8c2ff43a 100644 --- a/openHAB/SliderUITableViewCell.swift +++ b/openHAB/SliderUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/SpinnerViewController.swift b/openHAB/SpinnerViewController.swift index 5aa1dc140..ba143f51f 100644 --- a/openHAB/SpinnerViewController.swift +++ b/openHAB/SpinnerViewController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/SwitchUITableViewCell.swift b/openHAB/SwitchUITableViewCell.swift index c9f47e848..d9c177d40 100644 --- a/openHAB/SwitchUITableViewCell.swift +++ b/openHAB/SwitchUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/Throttler.swift b/openHAB/Throttler.swift index 50338b556..be18187e7 100644 --- a/openHAB/Throttler.swift +++ b/openHAB/Throttler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/UIAlertView+Block.swift b/openHAB/UIAlertView+Block.swift index 250f9dc55..aee6f9f33 100644 --- a/openHAB/UIAlertView+Block.swift +++ b/openHAB/UIAlertView+Block.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/UICircleButton.swift b/openHAB/UICircleButton.swift index 794dc41f1..c7de0cbd6 100644 --- a/openHAB/UICircleButton.swift +++ b/openHAB/UICircleButton.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/UILabel+Localization.swift b/openHAB/UILabel+Localization.swift index c599d0c12..e6fee91ca 100644 --- a/openHAB/UILabel+Localization.swift +++ b/openHAB/UILabel+Localization.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/UITableView.swift b/openHAB/UITableView.swift index 972db9f9b..27a58865a 100644 --- a/openHAB/UITableView.swift +++ b/openHAB/UITableView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/UIViewController+Localization.swift b/openHAB/UIViewController+Localization.swift index c32c71117..68e4fe574 100644 --- a/openHAB/UIViewController+Localization.swift +++ b/openHAB/UIViewController+Localization.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/URL+Static.swift b/openHAB/URL+Static.swift index 291582b28..fb02a3160 100644 --- a/openHAB/URL+Static.swift +++ b/openHAB/URL+Static.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/VideoUITableViewCell.swift b/openHAB/VideoUITableViewCell.swift index 5b2a66ed9..c54b09baa 100644 --- a/openHAB/VideoUITableViewCell.swift +++ b/openHAB/VideoUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/WatchMessageService.swift b/openHAB/WatchMessageService.swift index 3410490a8..444beb86e 100644 --- a/openHAB/WatchMessageService.swift +++ b/openHAB/WatchMessageService.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHAB/WebUITableViewCell.swift b/openHAB/WebUITableViewCell.swift index 576760d49..a88a810f3 100644 --- a/openHAB/WebUITableViewCell.swift +++ b/openHAB/WebUITableViewCell.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABIntents/GetItemStateIntentHandler.swift b/openHABIntents/GetItemStateIntentHandler.swift index 11830f43d..80c8cc0ee 100644 --- a/openHABIntents/GetItemStateIntentHandler.swift +++ b/openHABIntents/GetItemStateIntentHandler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABIntents/IntentHandler.swift b/openHABIntents/IntentHandler.swift index dfd5b5a78..e3eefdcc5 100644 --- a/openHABIntents/IntentHandler.swift +++ b/openHABIntents/IntentHandler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABIntents/SetColorValueIntentHandler.swift b/openHABIntents/SetColorValueIntentHandler.swift index be9804f8f..3c9ec77bb 100644 --- a/openHABIntents/SetColorValueIntentHandler.swift +++ b/openHABIntents/SetColorValueIntentHandler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABIntents/SetContactStateValueIntentHandler.swift b/openHABIntents/SetContactStateValueIntentHandler.swift index 37d241893..18d581ebf 100644 --- a/openHABIntents/SetContactStateValueIntentHandler.swift +++ b/openHABIntents/SetContactStateValueIntentHandler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABIntents/SetDimmerRollerValueIntentHandler.swift b/openHABIntents/SetDimmerRollerValueIntentHandler.swift index a59ee7673..936c5b25e 100644 --- a/openHABIntents/SetDimmerRollerValueIntentHandler.swift +++ b/openHABIntents/SetDimmerRollerValueIntentHandler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABIntents/SetNumberValueIntentHandler.swift b/openHABIntents/SetNumberValueIntentHandler.swift index dded1d188..44606ca80 100644 --- a/openHABIntents/SetNumberValueIntentHandler.swift +++ b/openHABIntents/SetNumberValueIntentHandler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABIntents/SetStringValueIntentHandler.swift b/openHABIntents/SetStringValueIntentHandler.swift index db06b472c..95e4044e0 100644 --- a/openHABIntents/SetStringValueIntentHandler.swift +++ b/openHABIntents/SetStringValueIntentHandler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABIntents/SetSwitchStateIntentHandler.swift b/openHABIntents/SetSwitchStateIntentHandler.swift index 6093efd0a..e23f4c914 100644 --- a/openHABIntents/SetSwitchStateIntentHandler.swift +++ b/openHABIntents/SetSwitchStateIntentHandler.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABTestsSwift/LocalizationTests.swift b/openHABTestsSwift/LocalizationTests.swift index 2639ebc58..680fdc719 100644 --- a/openHABTestsSwift/LocalizationTests.swift +++ b/openHABTestsSwift/LocalizationTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABTestsSwift/OpenHABEndPoint.swift b/openHABTestsSwift/OpenHABEndPoint.swift index 5899d3920..50c38a6ed 100644 --- a/openHABTestsSwift/OpenHABEndPoint.swift +++ b/openHABTestsSwift/OpenHABEndPoint.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABTestsSwift/OpenHABGeneralTests.swift b/openHABTestsSwift/OpenHABGeneralTests.swift index 86749ae55..24937a646 100644 --- a/openHABTestsSwift/OpenHABGeneralTests.swift +++ b/openHABTestsSwift/OpenHABGeneralTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABTestsSwift/OpenHABJSONParserTests.swift b/openHABTestsSwift/OpenHABJSONParserTests.swift index cc3d3dfcf..d09ebc665 100644 --- a/openHABTestsSwift/OpenHABJSONParserTests.swift +++ b/openHABTestsSwift/OpenHABJSONParserTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABTestsSwift/OpenHABSVGTests.swift b/openHABTestsSwift/OpenHABSVGTests.swift index 53e356552..4717420cd 100644 --- a/openHABTestsSwift/OpenHABSVGTests.swift +++ b/openHABTestsSwift/OpenHABSVGTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABTestsSwift/OpenHABWatchTests.swift b/openHABTestsSwift/OpenHABWatchTests.swift index 2c71e7aa5..9a44167e4 100644 --- a/openHABTestsSwift/OpenHABWatchTests.swift +++ b/openHABTestsSwift/OpenHABWatchTests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABTestsSwift/XCTestCaseExtension.swift b/openHABTestsSwift/XCTestCaseExtension.swift index 8b91b1465..acb6cdc72 100644 --- a/openHABTestsSwift/XCTestCaseExtension.swift +++ b/openHABTestsSwift/XCTestCaseExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABUITests/OpenHABUITests.swift b/openHABUITests/OpenHABUITests.swift index c907ce216..6bb5117ea 100644 --- a/openHABUITests/OpenHABUITests.swift +++ b/openHABUITests/OpenHABUITests.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/ComplicationController.swift b/openHABWatch Extension/ComplicationController.swift index e7d0bfc86..e2a349e9d 100644 --- a/openHABWatch Extension/ComplicationController.swift +++ b/openHABWatch Extension/ComplicationController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/ExtensionDelegate.swift b/openHABWatch Extension/ExtensionDelegate.swift index a09196712..ede5e53c6 100644 --- a/openHABWatch Extension/ExtensionDelegate.swift +++ b/openHABWatch Extension/ExtensionDelegate.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/HostingController.swift b/openHABWatch Extension/HostingController.swift index 29900b900..d37e2942d 100644 --- a/openHABWatch Extension/HostingController.swift +++ b/openHABWatch Extension/HostingController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/NotificationController.swift b/openHABWatch Extension/NotificationController.swift index cd2a7a23e..3a04fafe0 100644 --- a/openHABWatch Extension/NotificationController.swift +++ b/openHABWatch Extension/NotificationController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/NotificationView.swift b/openHABWatch Extension/NotificationView.swift index 55276bad3..41f6ba952 100644 --- a/openHABWatch Extension/NotificationView.swift +++ b/openHABWatch Extension/NotificationView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/OpenHABWatchTracker.swift b/openHABWatch Extension/OpenHABWatchTracker.swift index cb1ab4224..aa8cbac3a 100644 --- a/openHABWatch Extension/OpenHABWatchTracker.swift +++ b/openHABWatch Extension/OpenHABWatchTracker.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/PreferencesHostingController.swift b/openHABWatch Extension/PreferencesHostingController.swift index 8a21afb9c..75df87ae2 100644 --- a/openHABWatch Extension/PreferencesHostingController.swift +++ b/openHABWatch Extension/PreferencesHostingController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/UserDefaultsExtension.swift b/openHABWatch Extension/UserDefaultsExtension.swift index e14ee4c86..e20a85b24 100644 --- a/openHABWatch Extension/UserDefaultsExtension.swift +++ b/openHABWatch Extension/UserDefaultsExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/ContentView.swift b/openHABWatch Extension/Views/ContentView.swift index 2e2dc8d43..0509ace11 100644 --- a/openHABWatch Extension/Views/ContentView.swift +++ b/openHABWatch Extension/Views/ContentView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/PreferencesSwiftUIView.swift b/openHABWatch Extension/Views/PreferencesSwiftUIView.swift index 25e6c2d85..727a286c3 100644 --- a/openHABWatch Extension/Views/PreferencesSwiftUIView.swift +++ b/openHABWatch Extension/Views/PreferencesSwiftUIView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/ColorPickerRow.swift b/openHABWatch Extension/Views/Rows/ColorPickerRow.swift index 976919593..07fad256f 100644 --- a/openHABWatch Extension/Views/Rows/ColorPickerRow.swift +++ b/openHABWatch Extension/Views/Rows/ColorPickerRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/FrameRow.swift b/openHABWatch Extension/Views/Rows/FrameRow.swift index 02f2a1ccc..5ea262c2b 100644 --- a/openHABWatch Extension/Views/Rows/FrameRow.swift +++ b/openHABWatch Extension/Views/Rows/FrameRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/GenericRow.swift b/openHABWatch Extension/Views/Rows/GenericRow.swift index c6288096d..5728da9d5 100644 --- a/openHABWatch Extension/Views/Rows/GenericRow.swift +++ b/openHABWatch Extension/Views/Rows/GenericRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/ImageRawRow.swift b/openHABWatch Extension/Views/Rows/ImageRawRow.swift index f99a89459..186241dfd 100644 --- a/openHABWatch Extension/Views/Rows/ImageRawRow.swift +++ b/openHABWatch Extension/Views/Rows/ImageRawRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/ImageRow.swift b/openHABWatch Extension/Views/Rows/ImageRow.swift index b904be31d..333902e2f 100644 --- a/openHABWatch Extension/Views/Rows/ImageRow.swift +++ b/openHABWatch Extension/Views/Rows/ImageRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/MapViewRow.swift b/openHABWatch Extension/Views/Rows/MapViewRow.swift index 5dae077f0..d0d21f3d0 100644 --- a/openHABWatch Extension/Views/Rows/MapViewRow.swift +++ b/openHABWatch Extension/Views/Rows/MapViewRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/PreferencesRowUIView.swift b/openHABWatch Extension/Views/Rows/PreferencesRowUIView.swift index e8c99e4c9..8410944f5 100644 --- a/openHABWatch Extension/Views/Rows/PreferencesRowUIView.swift +++ b/openHABWatch Extension/Views/Rows/PreferencesRowUIView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/RollershutterRow.swift b/openHABWatch Extension/Views/Rows/RollershutterRow.swift index 5a43fbbff..f92edeabc 100644 --- a/openHABWatch Extension/Views/Rows/RollershutterRow.swift +++ b/openHABWatch Extension/Views/Rows/RollershutterRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/SegmentRow.swift b/openHABWatch Extension/Views/Rows/SegmentRow.swift index 3bcf0ba01..33ff21324 100644 --- a/openHABWatch Extension/Views/Rows/SegmentRow.swift +++ b/openHABWatch Extension/Views/Rows/SegmentRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/SetpointRow.swift b/openHABWatch Extension/Views/Rows/SetpointRow.swift index fc8c8c0f3..1c6785551 100644 --- a/openHABWatch Extension/Views/Rows/SetpointRow.swift +++ b/openHABWatch Extension/Views/Rows/SetpointRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/SliderRow.swift b/openHABWatch Extension/Views/Rows/SliderRow.swift index 703af0573..8aa566703 100644 --- a/openHABWatch Extension/Views/Rows/SliderRow.swift +++ b/openHABWatch Extension/Views/Rows/SliderRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Rows/SwitchRow.swift b/openHABWatch Extension/Views/Rows/SwitchRow.swift index 03a776379..c9e2a859b 100644 --- a/openHABWatch Extension/Views/Rows/SwitchRow.swift +++ b/openHABWatch Extension/Views/Rows/SwitchRow.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/Color+Extension.swift b/openHABWatch Extension/Views/Utils/Color+Extension.swift index 35798aa5a..092e4757c 100644 --- a/openHABWatch Extension/Views/Utils/Color+Extension.swift +++ b/openHABWatch Extension/Views/Utils/Color+Extension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/ColorSelection.swift b/openHABWatch Extension/Views/Utils/ColorSelection.swift index a3fd76388..16815f74a 100644 --- a/openHABWatch Extension/Views/Utils/ColorSelection.swift +++ b/openHABWatch Extension/Views/Utils/ColorSelection.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/DetailTextLabelView.swift b/openHABWatch Extension/Views/Utils/DetailTextLabelView.swift index c32254429..b30512c4e 100644 --- a/openHABWatch Extension/Views/Utils/DetailTextLabelView.swift +++ b/openHABWatch Extension/Views/Utils/DetailTextLabelView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/EncircledIconWithAction.swift b/openHABWatch Extension/Views/Utils/EncircledIconWithAction.swift index f145e6133..628f94716 100644 --- a/openHABWatch Extension/Views/Utils/EncircledIconWithAction.swift +++ b/openHABWatch Extension/Views/Utils/EncircledIconWithAction.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/IconView.swift b/openHABWatch Extension/Views/Utils/IconView.swift index be4f9999a..9a586150b 100644 --- a/openHABWatch Extension/Views/Utils/IconView.swift +++ b/openHABWatch Extension/Views/Utils/IconView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/MapView.swift b/openHABWatch Extension/Views/Utils/MapView.swift index 813733876..46fe7b5f6 100644 --- a/openHABWatch Extension/Views/Utils/MapView.swift +++ b/openHABWatch Extension/Views/Utils/MapView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/PreviewConstants.swift b/openHABWatch Extension/Views/Utils/PreviewConstants.swift index 00df902a7..4fdbba711 100644 --- a/openHABWatch Extension/Views/Utils/PreviewConstants.swift +++ b/openHABWatch Extension/Views/Utils/PreviewConstants.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/TextLabelView.swift b/openHABWatch Extension/Views/Utils/TextLabelView.swift index 21ae5eff0..9a07ec640 100644 --- a/openHABWatch Extension/Views/Utils/TextLabelView.swift +++ b/openHABWatch Extension/Views/Utils/TextLabelView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/Views/Utils/Unwrap.swift b/openHABWatch Extension/Views/Utils/Unwrap.swift index 4ff3708e3..a2aa658c0 100644 --- a/openHABWatch Extension/Views/Utils/Unwrap.swift +++ b/openHABWatch Extension/Views/Utils/Unwrap.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/ButtonTableRowController.swift b/openHABWatch Extension/openHABWatch Extension/ButtonTableRowController.swift index d3b693604..e0374b4fc 100644 --- a/openHABWatch Extension/openHABWatch Extension/ButtonTableRowController.swift +++ b/openHABWatch Extension/openHABWatch Extension/ButtonTableRowController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/ComplicationController.swift b/openHABWatch Extension/openHABWatch Extension/ComplicationController.swift index 7fbfe5025..ac93753ae 100644 --- a/openHABWatch Extension/openHABWatch Extension/ComplicationController.swift +++ b/openHABWatch Extension/openHABWatch Extension/ComplicationController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/ExtensionDelegate.swift b/openHABWatch Extension/openHABWatch Extension/ExtensionDelegate.swift index 50e731c86..aad19bd0c 100644 --- a/openHABWatch Extension/openHABWatch Extension/ExtensionDelegate.swift +++ b/openHABWatch Extension/openHABWatch Extension/ExtensionDelegate.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/InterfaceController.swift b/openHABWatch Extension/openHABWatch Extension/InterfaceController.swift index 43fcef309..52bdd601a 100644 --- a/openHABWatch Extension/openHABWatch Extension/InterfaceController.swift +++ b/openHABWatch Extension/openHABWatch Extension/InterfaceController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/Model/LazyView.swift b/openHABWatch Extension/openHABWatch Extension/Model/LazyView.swift index fbbc2a408..474a9696b 100644 --- a/openHABWatch Extension/openHABWatch Extension/Model/LazyView.swift +++ b/openHABWatch Extension/openHABWatch Extension/Model/LazyView.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABDataObject.swift b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABDataObject.swift index 3a267e9e8..cb2d53da1 100644 --- a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABDataObject.swift +++ b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABDataObject.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABSitemapPage.swift b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABSitemapPage.swift index 025d6f53f..15b913241 100644 --- a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABSitemapPage.swift +++ b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABSitemapPage.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidget.swift b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidget.swift index 4481266b9..8dfad5be7 100644 --- a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidget.swift +++ b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidget.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidgetExtension.swift b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidgetExtension.swift index 0bda4e06b..23fcfc6b1 100644 --- a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidgetExtension.swift +++ b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidgetExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/Model/UserDefaultsBacked.swift b/openHABWatch Extension/openHABWatch Extension/Model/UserDefaultsBacked.swift index 0e64509b5..6c0de7bbc 100644 --- a/openHABWatch Extension/openHABWatch Extension/Model/UserDefaultsBacked.swift +++ b/openHABWatch Extension/openHABWatch Extension/Model/UserDefaultsBacked.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/NotificationController.swift b/openHABWatch Extension/openHABWatch Extension/NotificationController.swift index 5a979612a..808272f65 100644 --- a/openHABWatch Extension/openHABWatch Extension/NotificationController.swift +++ b/openHABWatch Extension/openHABWatch Extension/NotificationController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/PrefsInterfaceController.swift b/openHABWatch Extension/openHABWatch Extension/PrefsInterfaceController.swift index f7399dde8..690641a4b 100644 --- a/openHABWatch Extension/openHABWatch Extension/PrefsInterfaceController.swift +++ b/openHABWatch Extension/openHABWatch Extension/PrefsInterfaceController.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/UserData.swift b/openHABWatch Extension/openHABWatch Extension/UserData.swift index c7f527143..1c93caaa5 100644 --- a/openHABWatch Extension/openHABWatch Extension/UserData.swift +++ b/openHABWatch Extension/openHABWatch Extension/UserData.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/UserDefaultsExtension.swift b/openHABWatch Extension/openHABWatch Extension/UserDefaultsExtension.swift index 85fc0772c..244ce3dff 100644 --- a/openHABWatch Extension/openHABWatch Extension/UserDefaultsExtension.swift +++ b/openHABWatch Extension/openHABWatch Extension/UserDefaultsExtension.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/app/AppState.swift b/openHABWatch Extension/openHABWatch Extension/app/AppState.swift index b7c816cb0..192c0e3ab 100644 --- a/openHABWatch Extension/openHABWatch Extension/app/AppState.swift +++ b/openHABWatch Extension/openHABWatch Extension/app/AppState.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/external/AppMessageService.swift b/openHABWatch Extension/openHABWatch Extension/external/AppMessageService.swift index 6ce4a3b67..a28e0a182 100644 --- a/openHABWatch Extension/openHABWatch Extension/external/AppMessageService.swift +++ b/openHABWatch Extension/openHABWatch Extension/external/AppMessageService.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. diff --git a/openHABWatch Extension/openHABWatch Extension/external/OpenHabService.swift b/openHABWatch Extension/openHABWatch Extension/external/OpenHabService.swift index 1076de66c..32d10edba 100644 --- a/openHABWatch Extension/openHABWatch Extension/external/OpenHabService.swift +++ b/openHABWatch Extension/openHABWatch Extension/external/OpenHabService.swift @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2022 Contributors to the openHAB project +// Copyright (c) 2010-2023 Contributors to the openHAB project // // See the NOTICE file(s) distributed with this work for additional // information. From 20918df25e80a0a52bdd82396c387d054176e8a8 Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Tue, 3 Jan 2023 16:51:29 +0100 Subject: [PATCH 12/20] Fixes #689 (#690) Signed-off-by: Tim Bert <5411131+timbms@users.noreply.github.com> --- CHANGELOG.md | 3 +++ .../Sources/OpenHABCore/Model/OpenHABWidget.swift | 8 ++++++-- OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift | 6 ++++-- openHAB/NewImageUITableViewCell.swift | 11 ++++++++++- openHABWatch Extension/Views/ContentView.swift | 11 ++++++++++- .../Model/ObservableOpenHABWidget.swift | 8 ++++++-- 6 files changed, 39 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6578138b..a2bff2833 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +- Implement forceAsItem support for Charts in Sitemaps +- Fixes #689 + ## [Version 2.4.53, Build 1580410519] - 2022-08-27Z - Fixes an incompatibility with openHAB 1.x systems diff --git a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift index 94c62dcb1..86971fb8e 100644 --- a/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift +++ b/OpenHABCore/Sources/OpenHABCore/Model/OpenHABWidget.swift @@ -91,6 +91,7 @@ public class OpenHABWidget: NSObject, MKAnnotation, Identifiable { public var text = "" public var legend: Bool? public var encoding = "" + public var forceAsItem: Bool? public var item: OpenHABItem? public var linkedPage: OpenHABLinkedPage? public var mappings: [OpenHABWidgetMapping] = [] @@ -212,7 +213,7 @@ extension OpenHABWidget.WidgetType: UnknownCaseRepresentable { extension OpenHABWidget { // This is an ugly initializer - convenience init(widgetId: String, label: String, icon: String, type: WidgetType, url: String?, period: String?, minValue: Double?, maxValue: Double?, step: Double?, refresh: Int?, height: Double?, isLeaf: Bool?, iconColor: String?, labelColor: String?, valueColor: String?, service: String?, state: String?, text: String?, legend: Bool?, encoding: String?, item: OpenHABItem?, linkedPage: OpenHABLinkedPage?, mappings: [OpenHABWidgetMapping], widgets: [OpenHABWidget], visibility: Bool?, switchSupport: Bool?) { + convenience init(widgetId: String, label: String, icon: String, type: WidgetType, url: String?, period: String?, minValue: Double?, maxValue: Double?, step: Double?, refresh: Int?, height: Double?, isLeaf: Bool?, iconColor: String?, labelColor: String?, valueColor: String?, service: String?, state: String?, text: String?, legend: Bool?, encoding: String?, item: OpenHABItem?, linkedPage: OpenHABLinkedPage?, mappings: [OpenHABWidgetMapping], widgets: [OpenHABWidget], visibility: Bool?, switchSupport: Bool?, forceAsItem: Bool?) { self.init() id = widgetId self.widgetId = widgetId @@ -250,6 +251,8 @@ extension OpenHABWidget { self.step = abs(self.step) self.visibility = visibility ?? true self.switchSupport = switchSupport ?? false + + self.forceAsItem = forceAsItem } convenience init(xml xmlElement: XMLElement) { @@ -322,6 +325,7 @@ public extension OpenHABWidget { let widgets: [OpenHABWidget.CodingData] let visibility: Bool? let switchSupport: Bool? + let forceAsItem: Bool? } } @@ -329,7 +333,7 @@ public extension OpenHABWidget { extension OpenHABWidget.CodingData { var openHABWidget: OpenHABWidget { let mappedWidgets = widgets.map(\.openHABWidget) - return OpenHABWidget(widgetId: widgetId, label: label, icon: icon, type: type, url: url, period: period, minValue: minValue, maxValue: maxValue, step: step, refresh: refresh, height: height, isLeaf: isLeaf, iconColor: iconColor, labelColor: labelcolor, valueColor: valuecolor, service: service, state: state, text: text, legend: legend, encoding: encoding, item: item?.openHABItem, linkedPage: linkedPage, mappings: mappings, widgets: mappedWidgets, visibility: visibility, switchSupport: switchSupport) + return OpenHABWidget(widgetId: widgetId, label: label, icon: icon, type: type, url: url, period: period, minValue: minValue, maxValue: maxValue, step: step, refresh: refresh, height: height, isLeaf: isLeaf, iconColor: iconColor, labelColor: labelcolor, valueColor: valuecolor, service: service, state: state, text: text, legend: legend, encoding: encoding, item: item?.openHABItem, linkedPage: linkedPage, mappings: mappings, widgets: mappedWidgets, visibility: visibility, switchSupport: switchSupport, forceAsItem: forceAsItem) } } diff --git a/OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift b/OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift index 8323cccb4..29fb5fe39 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/Endpoint.swift @@ -114,7 +114,7 @@ public extension Endpoint { } // swiftlint:disable:next function_parameter_count - static func chart(rootUrl: String, period: String?, type: OpenHABItem.ItemType?, service: String?, name: String?, legend: Bool?, theme: ChartStyle = .light) -> Endpoint { + static func chart(rootUrl: String, period: String?, type: OpenHABItem.ItemType?, service: String?, name: String?, legend: Bool?, theme: ChartStyle = .light, forceAsItem: Bool?) -> Endpoint { let random = Int.random(in: 0 ..< 1000) var endpoint = Endpoint( baseURL: rootUrl, @@ -125,7 +125,9 @@ public extension Endpoint { ] ) - if type == .group { + let forceAsItem = forceAsItem ?? false + + if type == .group, !forceAsItem { endpoint.queryItems.append(URLQueryItem(name: "groups", value: name)) } else { endpoint.queryItems.append(URLQueryItem(name: "items", value: name)) diff --git a/openHAB/NewImageUITableViewCell.swift b/openHAB/NewImageUITableViewCell.swift index b536369b9..056d566cd 100644 --- a/openHAB/NewImageUITableViewCell.swift +++ b/openHAB/NewImageUITableViewCell.swift @@ -41,7 +41,16 @@ class NewImageUITableViewCell: GenericUITableViewCell { switch widget.type { case .chart: - return .link(url: Endpoint.chart(rootUrl: appData!.openHABRootUrl, period: widget.period, type: widget.item?.type, service: widget.service, name: widget.item?.name, legend: widget.legend, theme: chartStyle).url) + return .link(url: Endpoint.chart( + rootUrl: appData!.openHABRootUrl, + period: widget.period, + type: widget.item?.type, + service: widget.service, + name: widget.item?.name, + legend: widget.legend, + theme: chartStyle, + forceAsItem: widget.forceAsItem + ).url) case .image: if let item = widget.item { return widgetPayload(fromItem: item) diff --git a/openHABWatch Extension/Views/ContentView.swift b/openHABWatch Extension/Views/ContentView.swift index 0509ace11..2b03102a3 100644 --- a/openHABWatch Extension/Views/ContentView.swift +++ b/openHABWatch Extension/Views/ContentView.swift @@ -81,7 +81,16 @@ struct ContentView: View { ImageRow(URL: URL(string: widget.url)) } case .chart: - let url = Endpoint.chart(rootUrl: settings.openHABRootUrl, period: widget.period, type: widget.item?.type ?? .none, service: widget.service, name: widget.item?.name, legend: widget.legend, theme: .dark).url + let url = Endpoint.chart( + rootUrl: settings.openHABRootUrl, + period: widget.period, + type: widget.item?.type ?? .none, + service: widget.service, + name: widget.item?.name, + legend: widget.legend, + theme: .dark, + forceAsItem: widget.forceAsItem + ).url ImageRow(URL: url) case .mapview: MapViewRow(widget: widget) diff --git a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidget.swift b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidget.swift index 8dfad5be7..c3a6e19bf 100644 --- a/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidget.swift +++ b/openHABWatch Extension/openHABWatch Extension/Model/ObservableOpenHABWidget.swift @@ -73,6 +73,7 @@ class ObservableOpenHABWidget: NSObject, MKAnnotation, Identifiable, ObservableO var widgets: [ObservableOpenHABWidget] = [] public var visibility = true public var switchSupport = false + public var forceAsItem: Bool? @Published var stateEnumBinding: WidgetTypeEnum = .unassigned @@ -210,7 +211,7 @@ class ObservableOpenHABWidget: NSObject, MKAnnotation, Identifiable, ObservableO extension ObservableOpenHABWidget { // This is an ugly initializer - convenience init(widgetId: String, label: String, icon: String, type: String, url: String?, period: String?, minValue: Double?, maxValue: Double?, step: Double?, refresh: Int?, height: Double?, isLeaf: Bool?, iconColor: String?, labelColor: String?, valueColor: String?, service: String?, state: String?, text: String?, legend: Bool?, encoding: String?, item: OpenHABItem?, linkedPage: OpenHABLinkedPage?, mappings: [OpenHABWidgetMapping], widgets: [ObservableOpenHABWidget]) { + convenience init(widgetId: String, label: String, icon: String, type: String, url: String?, period: String?, minValue: Double?, maxValue: Double?, step: Double?, refresh: Int?, height: Double?, isLeaf: Bool?, iconColor: String?, labelColor: String?, valueColor: String?, service: String?, state: String?, text: String?, legend: Bool?, encoding: String?, item: OpenHABItem?, linkedPage: OpenHABLinkedPage?, mappings: [OpenHABWidgetMapping], widgets: [ObservableOpenHABWidget], forceAsItem: Bool?) { self.init() id = widgetId @@ -249,6 +250,8 @@ extension ObservableOpenHABWidget { self.maxValue = max(self.minValue, self.maxValue) self.step = abs(self.step) + self.forceAsItem = forceAsItem + stateEnumBinding = stateEnum } @@ -323,6 +326,7 @@ extension ObservableOpenHABWidget { let linkedPage: OpenHABLinkedPage? let mappings: [OpenHABWidgetMapping] let widgets: [ObservableOpenHABWidget.CodingData] + let forceAsItem: Bool? } } @@ -330,7 +334,7 @@ extension ObservableOpenHABWidget { extension ObservableOpenHABWidget.CodingData { var openHABWidget: ObservableOpenHABWidget { let mappedWidgets = widgets.map(\.openHABWidget) - return ObservableOpenHABWidget(widgetId: widgetId, label: label, icon: icon, type: type, url: url, period: period, minValue: minValue, maxValue: maxValue, step: step, refresh: refresh, height: height, isLeaf: isLeaf, iconColor: iconColor, labelColor: labelcolor, valueColor: valuecolor, service: service, state: state, text: text, legend: legend, encoding: encoding, item: item?.openHABItem, linkedPage: linkedPage, mappings: mappings, widgets: mappedWidgets) + return ObservableOpenHABWidget(widgetId: widgetId, label: label, icon: icon, type: type, url: url, period: period, minValue: minValue, maxValue: maxValue, step: step, refresh: refresh, height: height, isLeaf: isLeaf, iconColor: iconColor, labelColor: labelcolor, valueColor: valuecolor, service: service, state: state, text: text, legend: legend, encoding: encoding, item: item?.openHABItem, linkedPage: linkedPage, mappings: mappings, widgets: mappedWidgets, forceAsItem: forceAsItem) } } From 921c7f446772a92d2fba36812ff4ba523498e6d0 Mon Sep 17 00:00:00 2001 From: Tim Bert <5411131+timbms@users.noreply.github.com> Date: Tue, 3 Jan 2023 17:12:53 +0100 Subject: [PATCH 13/20] Address some warnings: (#705) 2 Type contents order violation 1 For with where clause --- openHAB/MulticastDelegate.swift | 6 +-- openHAB/NewImageUITableViewCell.swift | 18 ++++---- openHAB/OpenHABWebViewController.swift | 64 +++++++++++++------------- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/openHAB/MulticastDelegate.swift b/openHAB/MulticastDelegate.swift index f7a6033cc..f099eaa4c 100644 --- a/openHAB/MulticastDelegate.swift +++ b/openHAB/MulticastDelegate.swift @@ -22,10 +22,8 @@ class MulticastDelegate { } func remove(_ delegateToRemove: T) { - for delegate in delegates.allObjects.reversed() { - if delegate === delegateToRemove as AnyObject { - delegates.remove(delegate) - } + for delegate in delegates.allObjects.reversed() where delegate === delegateToRemove as AnyObject { + delegates.remove(delegate) } } diff --git a/openHAB/NewImageUITableViewCell.swift b/openHAB/NewImageUITableViewCell.swift index 056d566cd..11e887921 100644 --- a/openHAB/NewImageUITableViewCell.swift +++ b/openHAB/NewImageUITableViewCell.swift @@ -87,15 +87,6 @@ class NewImageUITableViewCell: GenericUITableViewCell { chartStyle = OHInterfaceStyle.current == .light ? ChartStyle.light : ChartStyle.dark } - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - - chartStyle = OHInterfaceStyle.current == .light ? ChartStyle.light : ChartStyle.dark - if widget.type == .chart { - loadImage() - } - } - override func willMove(toSuperview newSuperview: UIView?) { super.willMove(toSuperview: newSuperview) @@ -193,6 +184,15 @@ class NewImageUITableViewCell: GenericUITableViewCell { os_log("Refreshing image on %g seconds schedule", log: .viewCycle, type: .info, Double(widget.refresh) / 1000) loadImage() } + + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + chartStyle = OHInterfaceStyle.current == .light ? ChartStyle.light : ChartStyle.dark + if widget.type == .chart { + loadImage() + } + } } extension NewImageUITableViewCell: GenericCellCacheProtocol { diff --git a/openHAB/OpenHABWebViewController.swift b/openHAB/OpenHABWebViewController.swift index 9b9b1b047..ead1c4e26 100644 --- a/openHAB/OpenHABWebViewController.swift +++ b/openHAB/OpenHABWebViewController.swift @@ -51,36 +51,6 @@ class OpenHABWebViewController: OpenHABViewController { private lazy var webView: WKWebView = newWebView() - private func newWebView() -> WKWebView { - let config = WKWebViewConfiguration() - config.allowsInlineMediaPlayback = true - config.mediaTypesRequiringUserActionForPlayback = [] - // adds: window.webkit.messageHandlers.xxxx.postMessage to JS env - config.userContentController.add(self, name: "Native") - config.userContentController.addUserScript(WKUserScript(source: js, injectionTime: .atDocumentStart, forMainFrameOnly: false)) - let webView = WKWebView(frame: view.bounds, configuration: config) - // Alow rotation of webview - webView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - webView.scrollView.bounces = false - webView.navigationDelegate = self - webView.uiDelegate = self - // support dark mode and avoid white flashing when loading - webView.isOpaque = false - webView.backgroundColor = UIColor.clear - // watch for URL changes so we can store the last visited path - observation = webView.observe(\.url, options: [.new]) { _, _ in - if let webviewURL = webView.url { - let url = URL(string: webviewURL.path, relativeTo: URL(string: self.openHABTrackedRootUrl)) - if let path = url?.path { - os_log("navigation change base: %{PUBLIC}@ path: %{PUBLIC}@", log: OSLog.default, type: .info, self.openHABTrackedRootUrl, path) - // append trailing slash as WebUI/Vue/F7 will try and issue a 302 if the url is navigated to directly, this can be problamatic on myopenHAB - self.appData?.currentWebViewPath = path.hasSuffix("/") ? path : path + "/" - } - } - } - return webView - } - override func viewDidLoad() { super.viewDidLoad() navigationController?.interactivePopGestureRecognizer?.isEnabled = true @@ -191,6 +161,36 @@ class OpenHABWebViewController: OpenHABViewController { "web" } + private func newWebView() -> WKWebView { + let config = WKWebViewConfiguration() + config.allowsInlineMediaPlayback = true + config.mediaTypesRequiringUserActionForPlayback = [] + // adds: window.webkit.messageHandlers.xxxx.postMessage to JS env + config.userContentController.add(self, name: "Native") + config.userContentController.addUserScript(WKUserScript(source: js, injectionTime: .atDocumentStart, forMainFrameOnly: false)) + let webView = WKWebView(frame: view.bounds, configuration: config) + // Alow rotation of webview + webView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + webView.scrollView.bounces = false + webView.navigationDelegate = self + webView.uiDelegate = self + // support dark mode and avoid white flashing when loading + webView.isOpaque = false + webView.backgroundColor = UIColor.clear + // watch for URL changes so we can store the last visited path + observation = webView.observe(\.url, options: [.new]) { _, _ in + if let webviewURL = webView.url { + let url = URL(string: webviewURL.path, relativeTo: URL(string: self.openHABTrackedRootUrl)) + if let path = url?.path { + os_log("navigation change base: %{PUBLIC}@ path: %{PUBLIC}@", log: OSLog.default, type: .info, self.openHABTrackedRootUrl, path) + // append trailing slash as WebUI/Vue/F7 will try and issue a 302 if the url is navigated to directly, this can be problamatic on myopenHAB + self.appData?.currentWebViewPath = path.hasSuffix("/") ? path : path + "/" + } + } + } + return webView + } + deinit { observation = nil } @@ -290,7 +290,9 @@ extension OpenHABWebViewController: WKNavigationDelegate { return } let credential = URLCredential(trust: serverTrust) - completionHandler(.useCredential, credential) + DispatchQueue.main.async { + completionHandler(.useCredential, credential) + } } else { var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling var credential: URLCredential? From 19a7013b32ebe02f32a7b2b6edfb1c46f8914491 Mon Sep 17 00:00:00 2001 From: Dan Cunningham Date: Wed, 4 Jan 2023 07:34:56 -0800 Subject: [PATCH 14/20] Update README.md Updated logo path --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1fe7c5aef..fcaa4b58c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

Bountysource
- Logo + Logo
openHAB client for iOS

From e9745932768c0646645bf18fd3778ba6d92dacf0 Mon Sep 17 00:00:00 2001 From: Dan Cunningham Date: Thu, 5 Jan 2023 21:33:58 -0800 Subject: [PATCH 15/20] Adds new option to always allow webrtc and not prompt (#702) * Adds new option to alows allow webrtc and not prompt Signed-off-by: Dan Cunningham * Add missing localizable entries Signed-off-by: Dan Cunningham Signed-off-by: Dan Cunningham Co-authored-by: Tim Bert <5411131+timbms@users.noreply.github.com> --- .../OpenHABCore/Util/Preferences.swift | 1 + openHAB/Main.storyboard | 246 ++++++++++-------- openHAB/OpenHABSettingsViewController.swift | 6 + openHAB/OpenHABWebViewController.swift | 5 + .../Resources/de.lproj/Localizable.strings | 1 + .../Resources/en.lproj/Localizable.strings | 1 + .../Resources/es.lproj/Localizable.strings | 1 + .../Resources/fi.lproj/Localizable.strings | 1 + .../Resources/fr.lproj/Localizable.strings | 1 + .../Resources/it.lproj/Localizable.strings | 1 + .../Resources/nb.lproj/Localizable.strings | 1 + .../Resources/nl.lproj/Localizable.strings | 1 + .../Resources/ru.lproj/Localizable.strings | 1 + 13 files changed, 163 insertions(+), 104 deletions(-) diff --git a/OpenHABCore/Sources/OpenHABCore/Util/Preferences.swift b/OpenHABCore/Sources/OpenHABCore/Util/Preferences.swift index 66d86c0d2..b73d4773a 100644 --- a/OpenHABCore/Sources/OpenHABCore/Util/Preferences.swift +++ b/OpenHABCore/Sources/OpenHABCore/Util/Preferences.swift @@ -91,6 +91,7 @@ public enum Preferences { @UserDefault("sendCrashReports", defaultValue: false) public static var sendCrashReports: Bool @UserDefault("sortSitemapsBy", defaultValue: 0) public static var sortSitemapsby: Int @UserDefault("defaultMainUIPath", defaultValue: "") public static var defaultMainUIPath: String + @UserDefault("alwaysAllowWebRTC", defaultValue: false) public static var alwaysAllowWebRTC: Bool // MARK: - Private diff --git a/openHAB/Main.storyboard b/openHAB/Main.storyboard index b6a621d9c..4ffa6cd50 100644 --- a/openHAB/Main.storyboard +++ b/openHAB/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -25,7 +25,7 @@ - + @@ -50,20 +50,20 @@ - + - + @@ -84,14 +84,14 @@ - + - + - + @@ -275,13 +275,13 @@ - + - + - + @@ -361,7 +361,7 @@ @@ -392,7 +392,7 @@ - + @@ -438,12 +438,12 @@ - + @@ -498,7 +498,7 @@ - + @@ -523,7 +523,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -580,14 +580,14 @@ - + - + @@ -617,14 +617,14 @@ - + - + @@ -656,14 +656,14 @@ - + - + @@ -696,14 +696,14 @@ - + - + @@ -735,14 +735,14 @@ - + - + @@ -774,14 +774,14 @@ - + - + @@ -815,14 +815,14 @@ - + - + @@ -853,14 +853,14 @@ - + - + @@ -891,14 +891,14 @@ - + - + @@ -936,14 +936,14 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -1009,14 +1047,14 @@ - + - + - + - + - - + - - + - + @@ -1165,14 +1203,14 @@ - + - + - + - + - + - + @@ -1291,20 +1329,20 @@ - +