From c240f1db0182a42ef183be903d63fa1894b1b1cc Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Tue, 8 Jul 2025 09:13:17 +0900 Subject: [PATCH 01/25] chore: refine unread message visibility logic and remove unnecessary height from GroupChannelMessageNewLine --- .../GroupChannelMessageRenderer/GroupChannelMessageNewLine.tsx | 1 - .../domain/groupChannel/component/GroupChannelMessageList.tsx | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/uikit-react-native/src/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.tsx b/packages/uikit-react-native/src/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.tsx index 7abf9c28..d94fdd5f 100644 --- a/packages/uikit-react-native/src/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.tsx +++ b/packages/uikit-react-native/src/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.tsx @@ -29,7 +29,6 @@ const GroupChannelMessageNewLine = ({ shouldRenderNewLine }: Props) => { const styles = StyleSheet.create({ container: { width: '100%', - height: 12, flexDirection: 'row', alignItems: 'center', marginBottom: 16, diff --git a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx index 852b2ae3..e14b16c9 100644 --- a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx +++ b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx @@ -205,10 +205,11 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { const unreadMessagesFloatingPropsRef = useRef(); const updateUnreadMessagesFloatingProps = useFreshCallback(() => { + const isNewLineExistInChannel = !!props.isNewLineExistInChannel && !!viewableMessages.current; unreadMessagesFloatingPropsRef.current = { visible: sbOptions.uikit.groupChannel.channel.enableMarkAsUnread && - !!props.isNewLineExistInChannel && + isNewLineExistInChannel && 0 < props.channel.unreadMessageCount && !isNewLineInViewportRef.current, onPressClose: onPressUnreadMessagesFloatingCloseButton, From 7b7cb8fc5961fb2f5a596ffa4127c71165cc8ca5 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Wed, 9 Jul 2025 10:22:35 +0900 Subject: [PATCH 02/25] chore: enhance unread message handling and visibility logic in GroupChannelMessageList --- .../component/GroupChannelMessageList.tsx | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx index e14b16c9..bb80b2cb 100644 --- a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx +++ b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx @@ -34,7 +34,12 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { const hasSeenNewLineRef = useRef(false); const isNewLineInViewportRef = useRef(false); + const isNewLineExistInChannelRef = useRef(false); + const scrolledAwayFromBottomRef = useRef(false); const [isVisibleUnreadMessageFloating, setIsVisibleUnreadMessageFloating] = useState(false); + const viewableMessages = useRef(); + const hasUserMarkedAsUnreadRef = useRef(false); + const [unreadFirstMessage, setUnreadFirstMessage] = useState(undefined); const updateHasSeenNewLine = useCallback( (hasSeenNewLine: boolean) => { @@ -46,10 +51,6 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { [props.onNewLineSeenChange], ); - const viewableMessages = useRef(); - const hasUserMarkedAsUnreadRef = useRef(false); - const [unreadFirstMessage, setUnreadFirstMessage] = useState(undefined); - const updateHasUserMarkedAsUnread = useCallback( (hasUserMarkedAsUnread: boolean) => { if (hasUserMarkedAsUnreadRef.current !== hasUserMarkedAsUnread) { @@ -84,13 +85,18 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { }, ); + const onScrolledAwayFromBottom = useFreshCallback((value: boolean) => { + scrolledAwayFromBottomRef.current = value; + props.onScrolledAwayFromBottom(value); + }); + const scrollToBottom = useFreshCallback(async (animated = false) => { if (props.hasNext()) { props.onUpdateSearchItem(undefined); - props.onScrolledAwayFromBottom(false); + onScrolledAwayFromBottom(false); await props.onResetMessageList().catch((_) => {}); - props.onScrolledAwayFromBottom(false); + onScrolledAwayFromBottom(false); lazyScrollToBottom({ animated }); } else { lazyScrollToBottom({ animated }); @@ -205,11 +211,16 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { const unreadMessagesFloatingPropsRef = useRef(); const updateUnreadMessagesFloatingProps = useFreshCallback(() => { - const isNewLineExistInChannel = !!props.isNewLineExistInChannel && !!viewableMessages.current; + const canAutoMarkAsRead = + !scrolledAwayFromBottomRef.current && + !hasUserMarkedAsUnreadRef.current && + (hasSeenNewLineRef.current || !isNewLineExistInChannelRef.current); + unreadMessagesFloatingPropsRef.current = { visible: sbOptions.uikit.groupChannel.channel.enableMarkAsUnread && - isNewLineExistInChannel && + !canAutoMarkAsRead && + isNewLineExistInChannelRef.current && 0 < props.channel.unreadMessageCount && !isNewLineInViewportRef.current, onPressClose: onPressUnreadMessagesFloatingCloseButton, @@ -220,9 +231,17 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { } }); + useEffect(() => { + isNewLineExistInChannelRef.current = !!props.isNewLineExistInChannel && !!viewableMessages.current; + }, [props.isNewLineExistInChannel, viewableMessages.current]); + useEffect(() => { updateUnreadMessagesFloatingProps(); - }, [props.isNewLineExistInChannel, sbOptions.uikit.groupChannel.channel.enableMarkAsUnread]); + }, [ + isNewLineExistInChannelRef.current, + props.channel.unreadMessageCount, + sbOptions.uikit.groupChannel.channel.enableMarkAsUnread, + ]); useGroupChannelHandler(sdk, { onReactionUpdated(channel, event) { @@ -327,6 +346,7 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { Date: Wed, 9 Jul 2025 11:39:45 +0900 Subject: [PATCH 03/25] refactor: show 99+ when new message count reaches 100 or higher --- .../src/localization/createBaseStringSet.ts | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/uikit-react-native/src/localization/createBaseStringSet.ts b/packages/uikit-react-native/src/localization/createBaseStringSet.ts index 97b4bfb4..73b457cb 100644 --- a/packages/uikit-react-native/src/localization/createBaseStringSet.ts +++ b/packages/uikit-react-native/src/localization/createBaseStringSet.ts @@ -117,10 +117,15 @@ export const createBaseStringSet = ({ dateLocale, overrides }: StringSetCreateOp GROUP_CHANNEL: { HEADER_TITLE: (uid, channel) => getGroupChannelTitle(uid, channel, USER_NO_NAME, CHANNEL_NO_MEMBERS), LIST_DATE_SEPARATOR: (date, locale) => getDateSeparatorFormat(date, locale ?? dateLocale), - LIST_BUTTON_NEW_MSG: (newMessages) => - newMessages.length === 1 ? `${newMessages.length} new message` : `${newMessages.length} new messages`, - LIST_FLOATING_UNREAD_MSG: (unreadMessageCount) => - unreadMessageCount === 1 ? `${unreadMessageCount} unread message` : `${unreadMessageCount} unread messages`, + LIST_BUTTON_NEW_MSG: (newMessages) => { + const count = newMessages.length; + const displayCount = count >= 100 ? '99+' : count; + return count === 1 ? `${displayCount} new message` : `${displayCount} new messages`; + }, + LIST_FLOATING_UNREAD_MSG: (unreadMessageCount) => { + const displayCount = unreadMessageCount >= 100 ? '99+' : unreadMessageCount; + return unreadMessageCount === 1 ? `${displayCount} unread message` : `${displayCount} unread messages`; + }, LIST_NEW_LINE: 'New messages', MESSAGE_BUBBLE_TIME: (message, locale) => getMessageTimeFormat(new Date(message.createdAt), locale ?? dateLocale), MESSAGE_BUBBLE_FILE_TITLE: (message) => message.name, @@ -135,8 +140,11 @@ export const createBaseStringSet = ({ dateLocale, overrides }: StringSetCreateOp HEADER_TITLE: 'Thread', HEADER_SUBTITLE: (uid, channel) => getGroupChannelTitle(uid, channel, USER_NO_NAME, CHANNEL_NO_MEMBERS), LIST_DATE_SEPARATOR: (date, locale) => getDateSeparatorFormat(date, locale ?? dateLocale), - LIST_BUTTON_NEW_MSG: (newMessages) => `${newMessages.length} new messages`, - + LIST_BUTTON_NEW_MSG: (newMessages) => { + const count = newMessages.length; + const displayCount = count >= 100 ? '99+' : count; + return `${displayCount} new messages`; + }, MESSAGE_BUBBLE_TIME: (message, locale) => getMessageTimeFormat(new Date(message.createdAt), locale ?? dateLocale), MESSAGE_BUBBLE_FILE_TITLE: (message) => message.name, MESSAGE_BUBBLE_EDITED_POSTFIX: ' (edited)', From 10d6390ee8f10c301855ae3f3d949ef25e401410 Mon Sep 17 00:00:00 2001 From: OnestarLee <100272033+OnestarLee@users.noreply.github.com> Date: Thu, 10 Jul 2025 10:25:54 +0900 Subject: [PATCH 04/25] Update packages/uikit-react-native/src/localization/createBaseStringSet.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../uikit-react-native/src/localization/createBaseStringSet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/uikit-react-native/src/localization/createBaseStringSet.ts b/packages/uikit-react-native/src/localization/createBaseStringSet.ts index 73b457cb..082a2bba 100644 --- a/packages/uikit-react-native/src/localization/createBaseStringSet.ts +++ b/packages/uikit-react-native/src/localization/createBaseStringSet.ts @@ -143,7 +143,7 @@ export const createBaseStringSet = ({ dateLocale, overrides }: StringSetCreateOp LIST_BUTTON_NEW_MSG: (newMessages) => { const count = newMessages.length; const displayCount = count >= 100 ? '99+' : count; - return `${displayCount} new messages`; + return count === 1 ? `${displayCount} new message` : `${displayCount} new messages`; }, MESSAGE_BUBBLE_TIME: (message, locale) => getMessageTimeFormat(new Date(message.createdAt), locale ?? dateLocale), MESSAGE_BUBBLE_FILE_TITLE: (message) => message.name, From 5fc7c186918b562d0b72d4f50247aa4c302611bb Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 10 Jul 2025 13:55:19 +0900 Subject: [PATCH 05/25] chore: streamline unread message detection logic in GroupChannelMessageList --- .../groupChannel/component/GroupChannelMessageList.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx index bb80b2cb..3adf2ff0 100644 --- a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx +++ b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx @@ -209,6 +209,10 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { [sbOptions.uikit.groupChannel.channel.enableMarkAsUnread, updateHasUserMarkedAsUnread], ); + useEffect(() => { + isNewLineExistInChannelRef.current = !!props.isNewLineExistInChannel && !!viewableMessages.current; + }, [props.isNewLineExistInChannel, viewableMessages.current]); + const unreadMessagesFloatingPropsRef = useRef(); const updateUnreadMessagesFloatingProps = useFreshCallback(() => { const canAutoMarkAsRead = @@ -231,10 +235,6 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { } }); - useEffect(() => { - isNewLineExistInChannelRef.current = !!props.isNewLineExistInChannel && !!viewableMessages.current; - }, [props.isNewLineExistInChannel, viewableMessages.current]); - useEffect(() => { updateUnreadMessagesFloatingProps(); }, [ From 010869804ea8d31544d6fec299f9acf14be52b61 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Mon, 14 Jul 2025 15:38:15 +0900 Subject: [PATCH 06/25] chore: rename UnreadMessage.ts to UnreadMessage.tsx and update string resource references --- .../2_features/{UnreadMessage.ts => UnreadMessage.tsx} | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) rename docs-validation/2_features/{UnreadMessage.ts => UnreadMessage.tsx} (93%) diff --git a/docs-validation/2_features/UnreadMessage.ts b/docs-validation/2_features/UnreadMessage.tsx similarity index 93% rename from docs-validation/2_features/UnreadMessage.ts rename to docs-validation/2_features/UnreadMessage.tsx index e562f5a7..516e0fb4 100644 --- a/docs-validation/2_features/UnreadMessage.ts +++ b/docs-validation/2_features/UnreadMessage.tsx @@ -5,16 +5,18 @@ import type { StringSet } from '@sendbird/uikit-react-native'; * {@link https://sendbird.com/docs/chat/uikit/v3/react-native/features/reactions} * */ function _stringResource(str: StringSet) { + str.GROUP_CHANNEL.LIST_NEW_LINE; str.GROUP_CHANNEL.LIST_FLOATING_UNREAD_MSG; str.LABELS.CHANNEL_MESSAGE_MARK_AS_UNREAD; } /** ------------------ **/ // interface StringSet { // GROUP_CHANNEL: { +// LIST_NEW_LINE: string; // LIST_FLOATING_UNREAD_MSG: (unreadMessageCount: number) => string; // }; // } -// + // interface StringSet { // LABELS: { // CHANNEL_MESSAGE_MARK_AS_UNREAD: string; From b89c18d543fd34ae7b32a9c07c0d61aa474d78af Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 14:21:42 +0900 Subject: [PATCH 07/25] chore: replace ref with state for new line existence in GroupChannelMessageList --- .../component/GroupChannelMessageList.tsx | 1 + .../src/fragments/createGroupChannelFragment.tsx | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx index 3adf2ff0..9b65293c 100644 --- a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx +++ b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx @@ -294,6 +294,7 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { break; } case 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER': { + isNewLineExistInChannelRef.current = true; const foundUnreadFirstMessage = findUnreadFirstMessage(true); processNewLineVisibility(foundUnreadFirstMessage); setUnreadFirstMessage(foundUnreadFirstMessage); diff --git a/packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx b/packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx index 2ea2b405..9d07622b 100644 --- a/packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx +++ b/packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx @@ -92,13 +92,12 @@ const createGroupChannelFragment = (initModule?: Partial): G } }); - const isNewLineExistInChannelRef = useRef(false); + const [isNewLineExistInChannel, setIsNewLineExistInChannel] = useState(false); const hasSeenNewLineRef = useRef(false); const hasUserMarkedAsUnreadRef = useRef(false); useEffect(() => { - isNewLineExistInChannelRef.current = - channel.myLastRead < (channel.lastMessage?.createdAt ?? Number.MIN_SAFE_INTEGER); + setIsNewLineExistInChannel(channel.myLastRead < (channel.lastMessage?.createdAt ?? Number.MIN_SAFE_INTEGER)); }, [channel.url]); const onNewLineSeenChange = useFreshCallback((hasSeenNewLine: boolean) => { @@ -114,7 +113,7 @@ const createGroupChannelFragment = (initModule?: Partial): G if ( !scrolledAwayFromBottom && !hasUserMarkedAsUnreadRef.current && - (hasSeenNewLineRef.current || !isNewLineExistInChannelRef.current) + (hasSeenNewLineRef.current || !isNewLineExistInChannel) ) { confirmAndMarkAsRead(channels); } @@ -154,7 +153,7 @@ const createGroupChannelFragment = (initModule?: Partial): G } } else if (ctx?.source === GroupChannelEventSource.EVENT_CHANNEL_UNREAD) { if (ctx.userIds.includes(currentUser?.userId ?? '')) { - isNewLineExistInChannelRef.current = true; + setIsNewLineExistInChannel(true); groupChannelPubSub.publish({ type: 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER' }); } } @@ -281,7 +280,7 @@ const createGroupChannelFragment = (initModule?: Partial): G if (!value) { resetNewMessages(); if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) { - if (!hasUserMarkedAsUnreadRef.current && (hasSeenNewLineRef.current || !isNewLineExistInChannelRef.current)) { + if (!hasUserMarkedAsUnreadRef.current && (hasSeenNewLineRef.current || !isNewLineExistInChannel)) { confirmAndMarkAsRead([channel]); } } @@ -331,7 +330,7 @@ const createGroupChannelFragment = (initModule?: Partial): G onPressMediaMessage={_onPressMediaMessage} flatListComponent={flatListComponent} flatListProps={memoizedFlatListProps} - isNewLineExistInChannel={isNewLineExistInChannelRef.current} + isNewLineExistInChannel={isNewLineExistInChannel} onNewLineSeenChange={onNewLineSeenChange} onUserMarkedAsUnreadChange={onUserMarkedAsUnreadChange} /> From b258e097c76c0a545b95ab4fcd7de7ec398f8b43 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 14:32:40 +0900 Subject: [PATCH 08/25] chore: adjust scrolling behavior and update reply type options in GroupChannelMessageList and uikitLocalConfigs --- .../domain/groupChannel/component/GroupChannelMessageList.tsx | 3 +++ sample/src/context/uikitLocalConfigs.tsx | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx index 9b65293c..998be0f5 100644 --- a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx +++ b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx @@ -298,6 +298,9 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { const foundUnreadFirstMessage = findUnreadFirstMessage(true); processNewLineVisibility(foundUnreadFirstMessage); setUnreadFirstMessage(foundUnreadFirstMessage); + if (!props.scrolledAwayFromBottom) { + scrollToBottom(true); + } break; } } diff --git a/sample/src/context/uikitLocalConfigs.tsx b/sample/src/context/uikitLocalConfigs.tsx index 191cf8a5..c7864313 100644 --- a/sample/src/context/uikitLocalConfigs.tsx +++ b/sample/src/context/uikitLocalConfigs.tsx @@ -5,8 +5,8 @@ import { uikitLocalConfigStorage } from '../factory/mmkv'; const KEY = 'uikitOptions'; const defaultOptions = { rtl: false, - replyType: 'thread' as 'none' | 'thread' | 'quote_reply', - threadReplySelectType: 'thread' as 'thread' | 'parent', + replyType: 'quote_reply' as 'none' | 'thread' | 'quote_reply', + threadReplySelectType: 'parent' as 'thread' | 'parent', }; type ContextValue = typeof defaultOptions; From 5338bc8c1764014385242661ac8e978cbe49ee4f Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 15:10:23 +0900 Subject: [PATCH 09/25] chore: correct variable reference for previous message in GroupChannelMessageList --- .../domain/groupChannel/component/GroupChannelMessageList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx index 998be0f5..6b565663 100644 --- a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx +++ b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx @@ -116,7 +116,7 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { return null; } - const prevMessage = props.messages[prevMessageIndex]; + const prevMessage = messages[prevMessageIndex]; if (prevMessage) { if (prevMessage.silent) { return getPrevNonSilentMessage(messages, prevMessageIndex + 1); From 0428ef726b706a6c1ca2494c1e8286652fd1a01e Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 15:57:13 +0900 Subject: [PATCH 10/25] chore: enable debug mode for Firebase App Distribution in deploy lane --- sample/android/fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample/android/fastlane/Fastfile b/sample/android/fastlane/Fastfile index fbf01c5a..f57f8dc8 100644 --- a/sample/android/fastlane/Fastfile +++ b/sample/android/fastlane/Fastfile @@ -14,6 +14,6 @@ platform :android do lane :deploy do android_set_version_name(gradle_file: "app/build.gradle", version_name: "#{VERSION}-#{DATE}") gradle(task: "assemble", build_type: "Release", flags: "--no-daemon") - firebase_app_distribution(groups: "sendbird, external") + firebase_app_distribution(groups: "sendbird, external", debug: true) end end From b14fe0b77615d1ee1d2433bc7064d815498ae882 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 16:31:48 +0900 Subject: [PATCH 11/25] chore: update CA certificates in config.yml --- .circleci/config.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5fd95e3c..34d29a3a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -109,6 +109,12 @@ jobs: - save_cache: *save_node_modules_base - save_cache: *save_node_modules_packages - run: *create_app_env + - run: + name: Update CA certificates + command: | + sudo apt-get update + sudo apt-get install -y ca-certificates + sudo update-ca-certificates - run: name: Create service-account.json environment: From 6e2a7d650d3a8c635cde513e6167c89332fc627a Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 16:53:38 +0900 Subject: [PATCH 12/25] chore: update gem dependencies in Gemfile.lock --- sample/android/Gemfile.lock | 122 ++++++++++++++++++++---------------- 1 file changed, 69 insertions(+), 53 deletions(-) diff --git a/sample/android/Gemfile.lock b/sample/android/Gemfile.lock index b24be692..7c0c5c9b 100644 --- a/sample/android/Gemfile.lock +++ b/sample/android/Gemfile.lock @@ -5,41 +5,43 @@ GEM base64 nkf rexml - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) artifactory (3.0.17) atomos (0.1.3) - aws-eventstream (1.3.0) - aws-partitions (1.913.0) - aws-sdk-core (3.191.6) + aws-eventstream (1.4.0) + aws-partitions (1.1129.0) + aws-sdk-core (3.226.2) aws-eventstream (~> 1, >= 1.3.0) - aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.8) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + base64 jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.78.0) - aws-sdk-core (~> 3, >= 3.191.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.146.1) - aws-sdk-core (~> 3, >= 3.191.0) + logger + aws-sdk-kms (1.106.0) + aws-sdk-core (~> 3, >= 3.225.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.193.0) + aws-sdk-core (~> 3, >= 3.225.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.8) - aws-sigv4 (1.8.0) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) - base64 (0.2.0) + base64 (0.3.0) claide (1.1.0) colored (1.2) colored2 (3.1.2) commander (4.6.0) highline (~> 2.0.0) declarative (0.0.20) - digest-crc (0.6.5) + digest-crc (0.7.0) rake (>= 12.0.0, < 14.0.0) domain_name (0.6.20240107) dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.110.0) - faraday (1.10.3) + excon (0.112.0) + faraday (1.10.4) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -55,20 +57,20 @@ GEM faraday (>= 0.8.0) http-cookie (~> 1.0.0) faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) + faraday-em_synchrony (1.0.1) faraday-excon (1.1.0) faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (1.0.1) + faraday-multipart (1.1.1) + multipart-post (~> 2.0) + faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) - faraday_middleware (1.2.0) + faraday_middleware (1.2.1) faraday (~> 1.0) - fastimage (2.3.1) - fastlane (2.220.0) + fastimage (2.4.0) + fastlane (2.228.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -84,6 +86,7 @@ GEM faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.0.0) gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) @@ -107,11 +110,15 @@ GEM tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) + xcpretty (~> 0.4.1) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) - fastlane-plugin-firebase_app_distribution (0.5.0) - fastlane-plugin-json (1.1.0) + fastlane-plugin-firebase_app_distribution (0.10.1) + google-apis-firebaseappdistribution_v1 (~> 0.3.0) + google-apis-firebaseappdistribution_v1alpha (~> 0.2.0) + fastlane-plugin-json (1.1.7) fastlane-plugin-versioning_android (0.1.1) + fastlane-sirp (1.0.0) + sysrandom (~> 1.0) gh_inspector (1.1.3) google-apis-androidpublisher_v3 (0.54.0) google-apis-core (>= 0.11.0, < 2.a) @@ -123,18 +130,22 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.a) rexml + google-apis-firebaseappdistribution_v1 (0.3.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-firebaseappdistribution_v1alpha (0.2.0) + google-apis-core (>= 0.11.0, < 2.a) google-apis-iamcredentials_v1 (0.17.0) google-apis-core (>= 0.11.0, < 2.a) google-apis-playcustomapp_v1 (0.13.0) google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.31.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.7.0) + google-cloud-core (1.8.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.4.0) + google-cloud-errors (1.5.0) google-cloud-storage (1.47.0) addressable (~> 2.8) digest-crc (~> 0.4) @@ -150,36 +161,39 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.5) + http-cookie (1.0.8) domain_name (~> 0.5) - httpclient (2.8.3) + httpclient (2.9.0) + mutex_m jmespath (1.6.2) - json (2.7.2) - jwt (2.8.1) + json (2.12.2) + jwt (2.10.2) base64 - mini_magick (4.12.0) + logger (1.7.0) + mini_magick (4.13.2) mini_mime (1.1.5) multi_json (1.15.0) - multipart-post (2.4.0) - nanaimo (0.3.0) - naturally (2.2.1) + multipart-post (2.4.1) + mutex_m (0.3.0) + nanaimo (0.4.0) + naturally (2.3.0) nkf (0.2.0) - optparse (0.4.0) + optparse (0.6.0) os (1.1.4) - plist (3.7.1) - public_suffix (5.0.5) - rake (13.2.1) + plist (3.7.2) + public_suffix (6.0.2) + rake (13.3.0) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.2.6) - rouge (2.0.7) + rexml (3.4.1) + rouge (3.28.0) ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rubyzip (2.4.1) security (0.1.5) - signet (0.19.0) + signet (0.20.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) @@ -187,6 +201,7 @@ GEM simctl (1.6.10) CFPropertyList naturally + sysrandom (1.0.5) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -196,23 +211,24 @@ GEM tty-spinner (0.9.3) tty-cursor (~> 0.7) uber (0.1.0) - unicode-display_width (2.5.0) + unicode-display_width (2.6.0) word_wrap (1.0.0) - xcodeproj (1.24.0) + xcodeproj (1.27.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (~> 3.2.4) - xcpretty (0.3.0) - rouge (~> 2.0.7) + nanaimo (~> 0.4.0) + rexml (>= 3.3.6, < 4.0) + xcpretty (0.4.1) + rouge (~> 3.28.0) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) PLATFORMS arm64-darwin-21 arm64-darwin-22 + arm64-darwin-24 x86_64-linux DEPENDENCIES @@ -222,4 +238,4 @@ DEPENDENCIES fastlane-plugin-versioning_android BUNDLED WITH - 2.3.7 + 2.3.27 From 8d4f2d6f71327e0708027b892904b218a724df0d Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:06:17 +0900 Subject: [PATCH 13/25] chore: update Ruby version to 3.2.2 in config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 34d29a3a..443fb349 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -99,7 +99,7 @@ jobs: name: Install Ninja command: sudo apt-get update && sudo apt-get install -y ninja-build - ruby/install: - version: '2.7.6' + version: '3.2.2' - ruby/install-deps: key: v{{ .Environment.CACHE_VERSION }}-gems-android app-dir: ./sample/android From 55b1e8c158ab3ac9dde4a9e056efb90b891a2a9f Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:16:31 +0900 Subject: [PATCH 14/25] chore: update Ruby version to 3.0.6 in config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 443fb349..0912803b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -99,7 +99,7 @@ jobs: name: Install Ninja command: sudo apt-get update && sudo apt-get install -y ninja-build - ruby/install: - version: '3.2.2' + version: '3.0.6' - ruby/install-deps: key: v{{ .Environment.CACHE_VERSION }}-gems-android app-dir: ./sample/android From 1ef21590a0a54fed22d97c5e44d3d58ee4706034 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:22:45 +0900 Subject: [PATCH 15/25] chore: update Ruby version to 3.1.0 in config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0912803b..a2f0c114 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -99,7 +99,7 @@ jobs: name: Install Ninja command: sudo apt-get update && sudo apt-get install -y ninja-build - ruby/install: - version: '3.0.6' + version: '3.1.0' - ruby/install-deps: key: v{{ .Environment.CACHE_VERSION }}-gems-android app-dir: ./sample/android From ba6b884482ea3cfae2544354bb56eebff4574d94 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:33:43 +0900 Subject: [PATCH 16/25] Revert "chore: update Ruby version to 3.1.0 in config.yml" This reverts commit 1ef21590a0a54fed22d97c5e44d3d58ee4706034. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a2f0c114..0912803b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -99,7 +99,7 @@ jobs: name: Install Ninja command: sudo apt-get update && sudo apt-get install -y ninja-build - ruby/install: - version: '3.1.0' + version: '3.0.6' - ruby/install-deps: key: v{{ .Environment.CACHE_VERSION }}-gems-android app-dir: ./sample/android From ec62d016377d9248c8099ef5a702f8ddb207f0bf Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:33:43 +0900 Subject: [PATCH 17/25] Revert "chore: update Ruby version to 3.0.6 in config.yml" This reverts commit 55b1e8c158ab3ac9dde4a9e056efb90b891a2a9f. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0912803b..443fb349 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -99,7 +99,7 @@ jobs: name: Install Ninja command: sudo apt-get update && sudo apt-get install -y ninja-build - ruby/install: - version: '3.0.6' + version: '3.2.2' - ruby/install-deps: key: v{{ .Environment.CACHE_VERSION }}-gems-android app-dir: ./sample/android From c39c8b8d88c14871b55a1e20cb261553be99dffc Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:33:43 +0900 Subject: [PATCH 18/25] Revert "chore: update Ruby version to 3.2.2 in config.yml" This reverts commit 8d4f2d6f71327e0708027b892904b218a724df0d. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 443fb349..34d29a3a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -99,7 +99,7 @@ jobs: name: Install Ninja command: sudo apt-get update && sudo apt-get install -y ninja-build - ruby/install: - version: '3.2.2' + version: '2.7.6' - ruby/install-deps: key: v{{ .Environment.CACHE_VERSION }}-gems-android app-dir: ./sample/android From 13214ed0de177ee338b59340dbe597231b102838 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:33:43 +0900 Subject: [PATCH 19/25] Revert "chore: update gem dependencies in Gemfile.lock" This reverts commit 6e2a7d650d3a8c635cde513e6167c89332fc627a. --- sample/android/Gemfile.lock | 122 ++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 69 deletions(-) diff --git a/sample/android/Gemfile.lock b/sample/android/Gemfile.lock index 7c0c5c9b..b24be692 100644 --- a/sample/android/Gemfile.lock +++ b/sample/android/Gemfile.lock @@ -5,43 +5,41 @@ GEM base64 nkf rexml - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) artifactory (3.0.17) atomos (0.1.3) - aws-eventstream (1.4.0) - aws-partitions (1.1129.0) - aws-sdk-core (3.226.2) + aws-eventstream (1.3.0) + aws-partitions (1.913.0) + aws-sdk-core (3.191.6) aws-eventstream (~> 1, >= 1.3.0) - aws-partitions (~> 1, >= 1.992.0) - aws-sigv4 (~> 1.9) - base64 + aws-partitions (~> 1, >= 1.651.0) + aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - logger - aws-sdk-kms (1.106.0) - aws-sdk-core (~> 3, >= 3.225.0) - aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.193.0) - aws-sdk-core (~> 3, >= 3.225.0) + aws-sdk-kms (1.78.0) + aws-sdk-core (~> 3, >= 3.191.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.146.1) + aws-sdk-core (~> 3, >= 3.191.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.5) - aws-sigv4 (1.12.1) + aws-sigv4 (~> 1.8) + aws-sigv4 (1.8.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) - base64 (0.3.0) + base64 (0.2.0) claide (1.1.0) colored (1.2) colored2 (3.1.2) commander (4.6.0) highline (~> 2.0.0) declarative (0.0.20) - digest-crc (0.7.0) + digest-crc (0.6.5) rake (>= 12.0.0, < 14.0.0) domain_name (0.6.20240107) dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.112.0) - faraday (1.10.4) + excon (0.110.0) + faraday (1.10.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -57,20 +55,20 @@ GEM faraday (>= 0.8.0) http-cookie (~> 1.0.0) faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.1) + faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) faraday-httpclient (1.0.1) - faraday-multipart (1.1.1) - multipart-post (~> 2.0) - faraday-net_http (1.0.2) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (1.0.1) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) - faraday_middleware (1.2.1) + faraday_middleware (1.2.0) faraday (~> 1.0) - fastimage (2.4.0) - fastlane (2.228.0) + fastimage (2.3.1) + fastlane (2.220.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -86,7 +84,6 @@ GEM faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) - fastlane-sirp (>= 1.0.0) gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) @@ -110,15 +107,11 @@ GEM tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.4.1) + xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) - fastlane-plugin-firebase_app_distribution (0.10.1) - google-apis-firebaseappdistribution_v1 (~> 0.3.0) - google-apis-firebaseappdistribution_v1alpha (~> 0.2.0) - fastlane-plugin-json (1.1.7) + fastlane-plugin-firebase_app_distribution (0.5.0) + fastlane-plugin-json (1.1.0) fastlane-plugin-versioning_android (0.1.1) - fastlane-sirp (1.0.0) - sysrandom (~> 1.0) gh_inspector (1.1.3) google-apis-androidpublisher_v3 (0.54.0) google-apis-core (>= 0.11.0, < 2.a) @@ -130,22 +123,18 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.a) rexml - google-apis-firebaseappdistribution_v1 (0.3.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-firebaseappdistribution_v1alpha (0.2.0) - google-apis-core (>= 0.11.0, < 2.a) google-apis-iamcredentials_v1 (0.17.0) google-apis-core (>= 0.11.0, < 2.a) google-apis-playcustomapp_v1 (0.13.0) google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.31.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.8.0) + google-cloud-core (1.7.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.5.0) + google-cloud-errors (1.4.0) google-cloud-storage (1.47.0) addressable (~> 2.8) digest-crc (~> 0.4) @@ -161,39 +150,36 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.8) + http-cookie (1.0.5) domain_name (~> 0.5) - httpclient (2.9.0) - mutex_m + httpclient (2.8.3) jmespath (1.6.2) - json (2.12.2) - jwt (2.10.2) + json (2.7.2) + jwt (2.8.1) base64 - logger (1.7.0) - mini_magick (4.13.2) + mini_magick (4.12.0) mini_mime (1.1.5) multi_json (1.15.0) - multipart-post (2.4.1) - mutex_m (0.3.0) - nanaimo (0.4.0) - naturally (2.3.0) + multipart-post (2.4.0) + nanaimo (0.3.0) + naturally (2.2.1) nkf (0.2.0) - optparse (0.6.0) + optparse (0.4.0) os (1.1.4) - plist (3.7.2) - public_suffix (6.0.2) - rake (13.3.0) + plist (3.7.1) + public_suffix (5.0.5) + rake (13.2.1) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.4.1) - rouge (3.28.0) + rexml (3.2.6) + rouge (2.0.7) ruby2_keywords (0.0.5) - rubyzip (2.4.1) + rubyzip (2.3.2) security (0.1.5) - signet (0.20.0) + signet (0.19.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) @@ -201,7 +187,6 @@ GEM simctl (1.6.10) CFPropertyList naturally - sysrandom (1.0.5) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -211,24 +196,23 @@ GEM tty-spinner (0.9.3) tty-cursor (~> 0.7) uber (0.1.0) - unicode-display_width (2.6.0) + unicode-display_width (2.5.0) word_wrap (1.0.0) - xcodeproj (1.27.0) + xcodeproj (1.24.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) - nanaimo (~> 0.4.0) - rexml (>= 3.3.6, < 4.0) - xcpretty (0.4.1) - rouge (~> 3.28.0) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + xcpretty (0.3.0) + rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) PLATFORMS arm64-darwin-21 arm64-darwin-22 - arm64-darwin-24 x86_64-linux DEPENDENCIES @@ -238,4 +222,4 @@ DEPENDENCIES fastlane-plugin-versioning_android BUNDLED WITH - 2.3.27 + 2.3.7 From fc8ed4160d818f4f2c74b53e6e9fcc6a2d48b4d8 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:33:44 +0900 Subject: [PATCH 20/25] Revert "chore: update CA certificates in config.yml" This reverts commit b14fe0b77615d1ee1d2433bc7064d815498ae882. --- .circleci/config.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 34d29a3a..5fd95e3c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -109,12 +109,6 @@ jobs: - save_cache: *save_node_modules_base - save_cache: *save_node_modules_packages - run: *create_app_env - - run: - name: Update CA certificates - command: | - sudo apt-get update - sudo apt-get install -y ca-certificates - sudo update-ca-certificates - run: name: Create service-account.json environment: From e59a8efc5d448a4b97b2ba66a8ec53b8f9a5451c Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 17:35:26 +0900 Subject: [PATCH 21/25] chore: update Android Docker image version to 2025.04.1-node --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5fd95e3c..311528b9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -89,7 +89,7 @@ jobs: deploy-android: docker: - - image: cimg/android:2023.10-node + - image: cimg/android:2025.04.1-node resource_class: xlarge environment: APP_VERSION: << pipeline.parameters.version >> From ae0e2dc99ed6a22f15e9ca868c40cde20e3f5e33 Mon Sep 17 00:00:00 2001 From: bang9 Date: Thu, 17 Jul 2025 18:24:54 +0900 Subject: [PATCH 22/25] chore: update android fastlane plugin --- sample/android/Gemfile.lock | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sample/android/Gemfile.lock b/sample/android/Gemfile.lock index b24be692..5951e73b 100644 --- a/sample/android/Gemfile.lock +++ b/sample/android/Gemfile.lock @@ -109,8 +109,10 @@ GEM xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) - fastlane-plugin-firebase_app_distribution (0.5.0) - fastlane-plugin-json (1.1.0) + fastlane-plugin-firebase_app_distribution (0.10.1) + google-apis-firebaseappdistribution_v1 (~> 0.3.0) + google-apis-firebaseappdistribution_v1alpha (~> 0.2.0) + fastlane-plugin-json (1.1.7) fastlane-plugin-versioning_android (0.1.1) gh_inspector (1.1.3) google-apis-androidpublisher_v3 (0.54.0) @@ -123,6 +125,10 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.a) rexml + google-apis-firebaseappdistribution_v1 (0.3.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-firebaseappdistribution_v1alpha (0.2.0) + google-apis-core (>= 0.11.0, < 2.a) google-apis-iamcredentials_v1 (0.17.0) google-apis-core (>= 0.11.0, < 2.a) google-apis-playcustomapp_v1 (0.13.0) From 1686a71ff6a792e7e2473855e0cf85571a6510d3 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 20:15:55 +0900 Subject: [PATCH 23/25] chore: add setup for trusted certificates in config.yml --- .circleci/config.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 311528b9..e4aeb198 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -109,6 +109,12 @@ jobs: - save_cache: *save_node_modules_base - save_cache: *save_node_modules_packages - run: *create_app_env + - run: + name: Set up trusted certificates + command: | + sudo apt-get update + sudo apt-get install -y ca-certificates + echo 'export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt' >> $BASH_ENV - run: name: Create service-account.json environment: @@ -117,6 +123,12 @@ jobs: echo "$FASTLANE_ANDROID_SERVICE_ACCOUNT" | base64 --decode >> $FILE_PATH echo "export GOOGLE_APPLICATION_CREDENTIALS=$CIRCLE_WORKING_DIRECTORY/$FILE_PATH" >> $BASH_ENV echo "export FIREBASEAPPDISTRO_APP=$FASTLANE_ANDROID_APP_ID" >> $BASH_ENV + - run: + name: Check certificates + command: ruby -ropenssl -e "puts OpenSSL::X509::DEFAULT_CERT_FILE" + - run: + name: Check certificates2 + command: ruby -ropen-uri -e "puts URI.open('https://google.com').read" - run: name: Run fastlane command: yarn deploy:android version:$APP_VERSION From eeef0211c3d618f0c6d053469ba04c951a8a4777 Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 20:32:37 +0900 Subject: [PATCH 24/25] chore: add setup for trusted certificates in config.yml --- .circleci/config.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e4aeb198..abd13392 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -123,12 +123,6 @@ jobs: echo "$FASTLANE_ANDROID_SERVICE_ACCOUNT" | base64 --decode >> $FILE_PATH echo "export GOOGLE_APPLICATION_CREDENTIALS=$CIRCLE_WORKING_DIRECTORY/$FILE_PATH" >> $BASH_ENV echo "export FIREBASEAPPDISTRO_APP=$FASTLANE_ANDROID_APP_ID" >> $BASH_ENV - - run: - name: Check certificates - command: ruby -ropenssl -e "puts OpenSSL::X509::DEFAULT_CERT_FILE" - - run: - name: Check certificates2 - command: ruby -ropen-uri -e "puts URI.open('https://google.com').read" - run: name: Run fastlane command: yarn deploy:android version:$APP_VERSION From 18f61d6242db5ef72840e5a8e827dd2148c313ec Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Thu, 17 Jul 2025 21:53:41 +0900 Subject: [PATCH 25/25] chore: update confirmAndMarkAsRead to optionally skip unread count check --- .../src/fragments/createGroupChannelFragment.tsx | 2 +- packages/uikit-utils/src/sendbird/channel.ts | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx b/packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx index 9d07622b..5afbe201 100644 --- a/packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx +++ b/packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx @@ -115,7 +115,7 @@ const createGroupChannelFragment = (initModule?: Partial): G !hasUserMarkedAsUnreadRef.current && (hasSeenNewLineRef.current || !isNewLineExistInChannel) ) { - confirmAndMarkAsRead(channels); + confirmAndMarkAsRead(channels, true); } } else { confirmAndMarkAsRead(channels); diff --git a/packages/uikit-utils/src/sendbird/channel.ts b/packages/uikit-utils/src/sendbird/channel.ts index 523355a8..3b159ac5 100644 --- a/packages/uikit-utils/src/sendbird/channel.ts +++ b/packages/uikit-utils/src/sendbird/channel.ts @@ -34,9 +34,12 @@ export const getOpenChannelChatAvailableState = async (channel: SendbirdOpenChan return { disabled, frozen, muted }; }; -export const confirmAndMarkAsRead = (channels: SendbirdBaseChannel[]) => { +export const confirmAndMarkAsRead = (channels: SendbirdBaseChannel[], skipUnreadCountCheck?: boolean) => { channels - .filter((it): it is SendbirdGroupChannel => it.isGroupChannel() && it.unreadMessageCount > 0) + .filter((it): it is SendbirdGroupChannel => { + if (!it.isGroupChannel()) return false; + return skipUnreadCountCheck ? true : it.unreadMessageCount > 0; + }) .forEach((it) => BufferedRequest.markAsRead.push(() => it.markAsRead(), it.url)); };