diff --git a/.easignore b/.easignore index 64c1237..429f5f9 100644 --- a/.easignore +++ b/.easignore @@ -49,7 +49,6 @@ packages/client/ios/build packages/client/ios/Pods packages/client/ios/.xcode.env.local /assets -google-services.json /sst.json /stacks /scriptable-widget.js diff --git a/packages/api/src/libs/chrome.js b/packages/api/src/libs/chrome.js index 0906bd5..09a043d 100644 --- a/packages/api/src/libs/chrome.js +++ b/packages/api/src/libs/chrome.js @@ -85,7 +85,7 @@ export const generateScreenshot = async (url, opts) => { url, target_url, duration, - }) + }), ); return { file: sharp_file, diff --git a/packages/api/src/libs/shared.js b/packages/api/src/libs/shared.js index 2c8ef44..010f6d6 100644 --- a/packages/api/src/libs/shared.js +++ b/packages/api/src/libs/shared.js @@ -98,7 +98,7 @@ const updateFirebaseData = async (uri, payload = {}) => }).catch((error) => { console.warn( 'Unable update firebase with payload', - JSON.stringify({ uri, payload, error: error.message }) + JSON.stringify({ uri, payload, error: error.message }), ); }); @@ -209,7 +209,7 @@ const getRates = async (base_rates) => { obj[type] = _.last(rate.stats); return obj; }, - {} + {}, ); return rates; }; @@ -219,7 +219,7 @@ const storeJsonObject = async ( key, json, bucket = S3_BUCKET, - is_public = false + is_public = false, ) => { // try { // https://blog.jonathandion.com/posts/json-gzip-s3/ @@ -289,7 +289,7 @@ const storeRateStats = async (rates) => { obj[type + '_stats'] = new_stats; return obj; }, - {} + {}, ); return storePublicJsonObject(RATE_STATS_OBJECT_KEY, base_rates); }; @@ -306,11 +306,11 @@ const storeHistoricalRatesJsonObject = async (rates) => { } // unhandled error throw error; - } + }, ); Object.entries(rates.rates || {}).forEach(([type, { stats }]) => { const moment_from = AmbitoDolar.getTimezoneDate( - _.last(stats)[0] + _.last(stats)[0], ).subtract(1, 'year'); const moment_to = AmbitoDolar.getTimezoneDate(_.first(stats)[0]); // limit base_rates excluding stats @@ -322,7 +322,7 @@ const storeHistoricalRatesJsonObject = async (rates) => { moment_to, 'day', // moment_to exclusion - '[)' + '[)', ); return include; }) @@ -349,7 +349,7 @@ const storeHistoricalRatesJsonObject = async (rates) => { obj[type] = rate; return obj; }, - {} + {}, ); return Promise.all([ storePublicJsonObject(HISTORICAL_RATES_LEGACY_OBJECT_KEY, legacy_rates), @@ -361,7 +361,7 @@ const storeHistoricalRatesJsonObject = async (rates) => { AmbitoDolar.QATAR_TYPE, // AmbitoDolar.LUXURY_TYPE // AmbitoDolar.CULTURAL_TYPE - ]) + ]), ), storePublicJsonObject(HISTORICAL_QUOTES_OBJECT_KEY, base_rates), ]); @@ -387,7 +387,7 @@ const storeRatesJsonObject = async (rates, is_updated) => { obj[type] = rate; return obj; }, - {} + {}, ); return Promise.all([ is_updated && storeRateStats(rates.rates), @@ -437,6 +437,8 @@ const getPathForRate = (type) => { return 'dolardelujo'; } else if (type === AmbitoDolar.CULTURAL_TYPE) { return 'dolarcoldplay'; + /* } else if (type === AmbitoDolar.CCB_TYPE) { + return 'dolarcripto'; */ } return `dolar/${type}`; }; @@ -477,7 +479,7 @@ const publishMessageToTopic = async (event, payload = {}) => { JSON.stringify({ event, payload, - }) + }), ); const params = { Message: JSON.stringify(payload), @@ -501,14 +503,14 @@ const publishMessageToTopic = async (event, payload = {}) => { id, event, duration, - }) + }), ); return id; }) .catch((error) => { console.warn( 'Unable to publish message to sns topic', - JSON.stringify({ event, error: error.message }) + JSON.stringify({ event, error: error.message }), ); }); }; @@ -537,7 +539,7 @@ const triggerEvent = async (event, payload) => { JSON.stringify({ event, payload, - }) + }), ); return AmbitoDolar.fetch( `https://maker.ifttt.com/trigger/${event}/with/key/${process.env.IFTTT_KEY}`, @@ -547,7 +549,7 @@ const triggerEvent = async (event, payload) => { 'Content-Type': 'application/json; charset=utf-8', }, body: JSON.stringify(payload), - } + }, ) .then(() => { const duration = (Date.now() - start_time) / 1000; @@ -556,7 +558,7 @@ const triggerEvent = async (event, payload) => { JSON.stringify({ event, duration, - }) + }), ); return { event, @@ -567,7 +569,7 @@ const triggerEvent = async (event, payload) => { // ignore error and trace console.warn( 'Unable to trigger the event', - JSON.stringify({ event, error: error.message }) + JSON.stringify({ event, error: error.message }), ); }); }; @@ -628,9 +630,9 @@ const triggerSocials = async (targets, caption, url, file, story_file) => { JSON.stringify({ target, error: error.message, - }) + }), ); - }) + }), ) .value(); // remove errors @@ -656,7 +658,7 @@ const storeImgurFile = async (image) => const fetchImage = async (url) => AmbitoDolar.fetch(url).then(async (response) => - Buffer.from(await response.arrayBuffer()) + Buffer.from(await response.arrayBuffer()), ); const wrapHandler = (handler) => { diff --git a/packages/api/src/libs/social/instagram.js b/packages/api/src/libs/social/instagram.js index 7f716ca..31631ce 100644 --- a/packages/api/src/libs/social/instagram.js +++ b/packages/api/src/libs/social/instagram.js @@ -37,10 +37,10 @@ export const publish = async (file, caption, story_file) => { (error) => { console.warn( 'Unable to get instagram session from bucket', - JSON.stringify({ error: error.message }) + JSON.stringify({ error: error.message }), ); // ignore - } + }, ); const current_session = await loadSession(ig, serialized_session); if (!current_session) { diff --git a/packages/api/src/libs/social/mastodon.js b/packages/api/src/libs/social/mastodon.js index 794a8ce..6af803e 100644 --- a/packages/api/src/libs/social/mastodon.js +++ b/packages/api/src/libs/social/mastodon.js @@ -1,10 +1,11 @@ -import { login } from 'masto'; +import { createRestAPIClient } from 'masto'; +import { Blob } from 'node:buffer'; // https://github.com/neet/masto.js/blob/main/examples/create-new-status-with-image.ts export const publish = async (caption, file) => { try { const start_time = Date.now(); - const masto = await login({ + const masto = await createRestAPIClient({ url: process.env.MASTODON_URL, accessToken: process.env.MASTODON_ACCESS_TOKEN, ...(process.env.SST_STAGE !== 'prod' && { @@ -13,10 +14,9 @@ export const publish = async (caption, file) => { }); const attachment = file && - (await masto.v2.mediaAttachments.create({ - // native support of `fetch` on node 18 - // file: new Blob([file]), - file, + (await masto.v2.media.create({ + file: new Blob([file]), + // file: await fetch(image_url).then((res) => res.blob()), })); const { id: status_id } = await masto.v1.statuses.create({ status: caption, diff --git a/packages/api/src/routes/prune-devices.js b/packages/api/src/routes/prune-devices.js index dfc3557..c216d25 100644 --- a/packages/api/src/routes/prune-devices.js +++ b/packages/api/src/routes/prune-devices.js @@ -52,7 +52,7 @@ export const handler = Shared.wrapHandler(async (event) => { }; const items = await Shared.getAllDataFromDynamoDB(params); await Promise.all( - items.map(({ installation_id }) => pruneDevice(installation_id)) + items.map(({ installation_id }) => pruneDevice(installation_id)), ); return Shared.serviceResponse(null, 200, { items: _.map(items, 'installation_id'), diff --git a/packages/api/src/routes/register-device.js b/packages/api/src/routes/register-device.js index a0354f0..20e151a 100644 --- a/packages/api/src/routes/register-device.js +++ b/packages/api/src/routes/register-device.js @@ -15,7 +15,7 @@ export const handler = Shared.wrapHandler(async (event) => { JSON.parse(event.body || '{}'); if (!installation_id) { throw new Error( - 'Request query parameter is malformed, missing or has an invalid value' + 'Request query parameter is malformed, missing or has an invalid value', ); } let update_expression = 'ADD app_loads :val '; @@ -34,7 +34,7 @@ export const handler = Shared.wrapHandler(async (event) => { last_update: timestamp, }, // push_token is null on initial registration then undefined - _.isNil + _.isNil, // _.isUndefined ); if (payload.push_token) { @@ -61,7 +61,7 @@ export const handler = Shared.wrapHandler(async (event) => { ReturnValues: 'ALL_NEW', }; const { Attributes: data } = await ddbDocClient.send( - new UpdateCommand(params) + new UpdateCommand(params), ); const { notification_settings: notificationSettings } = data; const results = { @@ -84,7 +84,7 @@ export const handler = Shared.wrapHandler(async (event) => { console.info( 'Registration or interaction for the device completed', // JSON.stringify(data) - installation_id + installation_id, ); return Shared.serviceResponse(null, 200, results); } catch (error) { diff --git a/packages/api/src/routes/stats.js b/packages/api/src/routes/stats.js index 165eccd..1e5519c 100644 --- a/packages/api/src/routes/stats.js +++ b/packages/api/src/routes/stats.js @@ -7,8 +7,8 @@ export const handler = Shared.wrapHandler(async () => { try { const credentials = Buffer.from( [process.env.AMPLITUDE_API_KEY, process.env.AMPLITUDE_SECRET_KEY].join( - ':' - ) + ':', + ), ).toString('base64'); const results = await AmbitoDolar.fetch( process.env.AMPLITUDE_USAGE_STATS_URL, @@ -16,7 +16,7 @@ export const handler = Shared.wrapHandler(async () => { headers: { Authorization: `Basic ${credentials}`, }, - } + }, ).then(async (response) => { const { data } = await response.json(); const [users, events, conversions] = _.chain(data?.values) diff --git a/packages/api/src/subscribers/funding-notify.js b/packages/api/src/subscribers/funding-notify.js index 659c2bb..56179a7 100644 --- a/packages/api/src/subscribers/funding-notify.js +++ b/packages/api/src/subscribers/funding-notify.js @@ -8,7 +8,7 @@ export const handler = Shared.wrapHandler(async (event) => { JSON.stringify({ generate_only, targets, - }) + }), ); const screenshot_url = Shared.getSocialScreenshotUrl({ type: 'funding', @@ -33,14 +33,14 @@ export const handler = Shared.wrapHandler(async (event) => { caption, image_url, file, - story_file + story_file, ); console.info('Completed', JSON.stringify(results)); return results; } catch (error) { console.warn( 'Unable to generate the screenshot for notification', - JSON.stringify({ error: error.message }) + JSON.stringify({ error: error.message }), ); } }); diff --git a/packages/api/src/subscribers/invalidate-receipts.js b/packages/api/src/subscribers/invalidate-receipts.js index 358461e..36168fb 100644 --- a/packages/api/src/subscribers/invalidate-receipts.js +++ b/packages/api/src/subscribers/invalidate-receipts.js @@ -29,14 +29,14 @@ const check = async (items = [], readonly) => { 'Receipts', JSON.stringify({ amount: receiptIds.length, - }) + }), ); const receiptIdChunks = expo.chunkPushNotificationReceiptIds(receiptIds); // leave only the records with errors const invalid_receipts = await Promise.all( receiptIdChunks.map((chunk) => - expo.getPushNotificationReceiptsAsync(chunk) - ) + expo.getPushNotificationReceiptsAsync(chunk), + ), ) // merge objects inside array .then((receiptChunks) => Object.assign({}, ...receiptChunks.flat())) @@ -57,23 +57,23 @@ const check = async (items = [], readonly) => { } return obj; }, - [] - ) + [], + ), ) .catch((error) => { console.error( 'Unable to get receipts', JSON.stringify({ error: error.message, - }) + }), ); throw error; }); if (!readonly) { await Promise.all( invalid_receipts.map(({ installation_id }) => - invalidateDevice(installation_id) - ) + invalidateDevice(installation_id), + ), ); } return { @@ -95,7 +95,7 @@ export const handler = Shared.wrapHandler(async (event) => { JSON.stringify({ date_from, readonly, - }) + }), ); const filter_expression = '#notification_date >= :date_from'; const expression_attribute_values = { @@ -121,12 +121,12 @@ export const handler = Shared.wrapHandler(async (event) => { Shared.getTickets(date, type).catch((error) => { console.warn( 'Unable to get notification tickets from bucket', - JSON.stringify({ date, type, error: error.message }) + JSON.stringify({ date, type, error: error.message }), ); - }) - ) + }), + ), ).then((data) => - _.chain(data).flatten().compact().uniqBy('installation_id').value() + _.chain(data).flatten().compact().uniqBy('installation_id').value(), ); const results = await check(tickets, readonly === true); console.info('Completed', JSON.stringify(results)); diff --git a/packages/api/src/subscribers/notify.js b/packages/api/src/subscribers/notify.js index 72372a7..6aa0ec2 100644 --- a/packages/api/src/subscribers/notify.js +++ b/packages/api/src/subscribers/notify.js @@ -20,8 +20,8 @@ const getChangeMessage = (rate) => { if (Array.isArray(value)) { body.push( `${AmbitoDolar.formatRateCurrency( - value[0] - )}–${AmbitoDolar.formatRateCurrency(value[1])}` + value[0], + )}–${AmbitoDolar.formatRateCurrency(value[1])}`, ); } else { body.push(AmbitoDolar.formatRateCurrency(value)); @@ -74,7 +74,7 @@ const getMessagesFromCurrentRate = async (items, type, rates) => { const messages = items.map( ({ installation_id, app_version, push_token, notification_settings }) => { const settings = AmbitoDolar.getNotificationSettings( - notification_settings + notification_settings, )[type]; const rates_for_settings = Object.entries(rates).reduce( (obj, [type, value]) => { @@ -93,7 +93,7 @@ const getMessagesFromCurrentRate = async (items, type, rates) => { } return obj; }, - {} + {}, ); // remove rates not available in app version if (Shared.isSemverLt(app_version, MIN_CLIENT_VERSION_FOR_MEP)) { @@ -127,14 +127,14 @@ const getMessagesFromCurrentRate = async (items, type, rates) => { }, }); } - } + }, ); // remove messages without body return _.compact(messages); } catch (error) { console.warn( 'Unable to build message for notification', - JSON.stringify({ type, error: error.message }) + JSON.stringify({ type, error: error.message }), ); } // empty when rates or error @@ -148,7 +148,7 @@ const checkForSetting = (notification_settings = {}, type) => { const sendPushNotifications = async ( items = [], - { message: body_message, type, rates } + { message: body_message, type, rates }, ) => { if (body_message) { type = 'custom'; @@ -159,7 +159,7 @@ const sendPushNotifications = async ( body_message, type, rates, - }) + }), ); const tickets = []; if (items.length > 0) { @@ -168,7 +168,7 @@ const sendPushNotifications = async ( // leave the most updated devices on top (newest settings first) .orderBy( (item) => AmbitoDolar.getTimezoneDate(item.last_update).valueOf(), - ['desc'] + ['desc'], ) // exclude duplicates (removing from below) .uniqBy('push_token') @@ -186,32 +186,41 @@ const sendPushNotifications = async ( app_version, push_token, }, - }) + }), ); } else { // filter the items that have this type of notification enabled items = _.filter(items, ({ notification_settings }) => - checkForSetting(notification_settings, type) + checkForSetting(notification_settings, type), ); // leave testing device only for new notifications when development if (process.env.IS_LOCAL && items.length > 1) { throw new Error( - 'Only single messages can be sent while running in development mode' + 'Only single messages can be sent while running in development mode', ); } messages.push(...(await getMessagesFromCurrentRate(items, type, rates))); } - console.info( + /* console.info( 'Generated messages', JSON.stringify({ amount: messages.length, }) - ); + ); */ const expo_start_time = Date.now(); if (messages.length > 0) { const expo = Shared.getExpoClient(); // https://github.com/expo/expo-server-sdk-node/blob/master/src/ExpoClient.ts#L20 const chunks = expo.chunkPushNotifications(messages); + console.info( + 'Generated messages', + JSON.stringify({ + messages: messages.length, + chunks: chunks.length, + limit: expo.pushNotificationChunkSizeLimit, + }), + ); + // FIXME: limit promise all to 500 parallel requests const failedChunks = []; // FIXME: how to prevent "504 Gateway Time-out" errors? // concurrent requests using maxConcurrentRequests opt @@ -221,7 +230,7 @@ const sendPushNotifications = async ( expo .sendPushNotificationsAsync( // remove source from message - chunk.map((message) => _.omit(message, 'source')) + chunk.map((message) => _.omit(message, 'source')), ) .then((tickets) => // same order as input @@ -233,7 +242,7 @@ const sendPushNotifications = async ( message, ...source, }; - }) + }), ) .catch(() => { // ignore when error @@ -245,9 +254,9 @@ const sendPushNotifications = async ( }) ); */ failedChunks.push(chunk); - }) - ) - ).then((ticketChunks) => _.compact(ticketChunks.flat()))) + }), + ), + ).then((ticketChunks) => _.compact(ticketChunks.flat()))), ); const sending_duration = (Date.now() - expo_start_time) / 1000; console.info( @@ -259,7 +268,7 @@ const sendPushNotifications = async ( }), tickets: tickets.length, duration: sending_duration, - }) + }), ); // save tickets to aws const notification_date = AmbitoDolar.getTimezoneDate().format(); @@ -274,7 +283,7 @@ const sendPushNotifications = async ( tickets: tickets.length, duration: sending_duration, }, - _.isNil + _.isNil, ), }; await Promise.all([ @@ -285,7 +294,7 @@ const sendPushNotifications = async ( 'Unable to store notification tickets', JSON.stringify({ error: error.message, - }) + }), ); }); } @@ -317,7 +326,7 @@ export const handler = Shared.wrapHandler(async (event) => { type, rates, social, - }) + }), ); let filter_expression = 'attribute_exists(push_token) AND attribute_not_exists(invalidated)'; @@ -345,7 +354,7 @@ export const handler = Shared.wrapHandler(async (event) => { JSON.stringify({ installation_id, error: error.message, - }) + }), ); }); if (items && installation_id && message) { @@ -353,7 +362,7 @@ export const handler = Shared.wrapHandler(async (event) => { promises.push( sendPushNotifications(items, { message, - }) + }), ); } else { // uses getRates when NOTIFICATION_CLOSE_TYPE @@ -366,7 +375,7 @@ export const handler = Shared.wrapHandler(async (event) => { sendPushNotifications(items, { type, rates: current_rates, - }) + }), ); } if (social && !installation_id && !process.env.IS_LOCAL) { @@ -378,7 +387,7 @@ export const handler = Shared.wrapHandler(async (event) => { type, title: AmbitoDolar.getNotificationTitle(type), caption: getSocialCaption(type, social_rates), - }) + }), ); } } else { diff --git a/packages/api/src/subscribers/process.js b/packages/api/src/subscribers/process.js index fec093a..8b79804 100644 --- a/packages/api/src/subscribers/process.js +++ b/packages/api/src/subscribers/process.js @@ -41,7 +41,7 @@ const getRate = (type) => { // log error and continue processing console.warn( 'Invalid schema validation on rate', - JSON.stringify({ type, data, error: error.message }) + JSON.stringify({ type, data, error: error.message }), ); } else { const identity = value.fecha; @@ -58,7 +58,7 @@ const getRate = (type) => { JSON.stringify({ type, duration, - }) + }), ); return result; } @@ -67,7 +67,7 @@ const getRate = (type) => { // log error and continue processing console.warn( 'Unable to fetch rate', - JSON.stringify({ type, error: error.message }) + JSON.stringify({ type, error: error.message }), ); }); }; @@ -89,7 +89,7 @@ const getCryptoRates = (rates) => { const schema = Joi.object() .keys({ ..._.mapValues(rates, () => - Joi.number().required().custom(numberValidator) + Joi.number().required().custom(numberValidator), ), time: Joi.number().integer().default(Date.now), }) @@ -99,7 +99,7 @@ const getCryptoRates = (rates) => { // log error and continue processing console.warn( 'Invalid schema validation on crypto rates', - JSON.stringify({ rates, data, error: error.message }) + JSON.stringify({ rates, data, error: error.message }), ); } else { const identity = value.time; @@ -113,7 +113,7 @@ const getCryptoRates = (rates) => { JSON.stringify({ rates, duration, - }) + }), ); return result; } @@ -122,7 +122,7 @@ const getCryptoRates = (rates) => { // log error and continue processing console.warn( 'Unable to fetch crypto rates', - JSON.stringify({ rates, error: error.message }) + JSON.stringify({ rates, error: error.message }), ); }); }; @@ -140,7 +140,7 @@ const getHistoricalRate = (type, rate, { max = 0, max_date }) => { }; console.info( 'Historical rate updated', - JSON.stringify({ type, old: { max, max_date }, new: result.rate }) + JSON.stringify({ type, old: { max, max_date }, new: result.rate }), ); return result; } @@ -172,7 +172,7 @@ const getNewRates = (rates, new_rates) => : rate_last_max; // calculate from open / close rate and truncate const rate_change_percent = AmbitoDolar.getNumber( - (rate_last_max / rate_open - 1) * 100 + (rate_last_max / rate_open - 1) * 100, ); const new_rate = [ AmbitoDolar.getTimezoneDate().format(), @@ -188,7 +188,7 @@ const getNewRates = (rates, new_rates) => type, old: rate, new: new_rate, - }) + }), ); } return obj; @@ -224,7 +224,7 @@ const getBusinessDayRates = (rates, realtime) => { // ['cclgd30', AmbitoDolar.CCL_TYPE], // ['mepgd30', AmbitoDolar.MEP_TYPE], AmbitoDolar.CCB_TYPE, - ]) + ]), ); } return Promise.all(promises) @@ -235,8 +235,8 @@ const getBusinessDayRates = (rates, realtime) => { const getHistoricalRates = (rates, base_rates) => Promise.all( Object.entries(rates).map(([type, rate]) => - getHistoricalRate(type, rate, base_rates[type]) - ) + getHistoricalRate(type, rate, base_rates[type]), + ), ).then(getObjectRates); const notify = ( @@ -244,7 +244,7 @@ const notify = ( rates, has_rates_from_today, new_rates, - has_new_rates + has_new_rates, ) => { const notifications = []; if (close_day === true) { @@ -273,12 +273,12 @@ const notify = ( const rate_last = AmbitoDolar.getRateValue(rate); // truncate decimals const value_diff = AmbitoDolar.getNumber( - Math.abs(prev_rate_last - rate_last) + Math.abs(prev_rate_last - rate_last), ); const rate_threshold = Shared.getVariationThreshold( type, prev_rate_last, - rate_last + rate_last, ); console.info( 'Looking for rate variation to notify', @@ -286,7 +286,7 @@ const notify = ( type, diff: value_diff, threshold: rate_threshold, - }) + }), ); if (value_diff !== 0 && value_diff > rate_threshold) { // variation found @@ -297,7 +297,7 @@ const notify = ( } return obj; }, - {} + {}, ); if (!_.isEmpty(variation_rates)) { // join variations in a single notification @@ -313,8 +313,8 @@ const notify = ( Shared.triggerNotifyEvent({ type, rates, - }) - ) + }), + ), ); }; @@ -323,14 +323,14 @@ const REALTIME_PROCESSING_INTERVAL = 15; export const handler = Shared.wrapHandler(async (event) => { const { notify: trigger_notification, close: close_day } = JSON.parse( - event.Records[0].Sns.Message + event.Records[0].Sns.Message, ); console.info( 'Message received', JSON.stringify({ trigger_notification, close_day, - }) + }), ); // avoid fetch delays const in_time = @@ -389,7 +389,7 @@ export const handler = Shared.wrapHandler(async (event) => { // took historical data in parallel from new rates const new_historical_rates = await getHistoricalRates( new_rates, - base_rates.rates + base_rates.rates, ); // merge new_historical_rates with base_rates Object.entries(new_historical_rates).forEach(([type, historical_rate]) => { @@ -417,7 +417,7 @@ export const handler = Shared.wrapHandler(async (event) => { rates, has_rates_from_today, new_rates, - has_new_rates + has_new_rates, ); } console.info('Completed', JSON.stringify(new_rates)); diff --git a/packages/api/src/subscribers/social-notify.js b/packages/api/src/subscribers/social-notify.js index 8d236e4..4d8b6ed 100644 --- a/packages/api/src/subscribers/social-notify.js +++ b/packages/api/src/subscribers/social-notify.js @@ -23,7 +23,7 @@ export const handler = Shared.wrapHandler(async (event) => { caption, generate_only, targets, - }) + }), ); let results; if ( @@ -48,12 +48,12 @@ export const handler = Shared.wrapHandler(async (event) => { caption, image_url, file, - story_file + story_file, ); } catch (error) { console.warn( 'Unable to generate the screenshot for notification', - JSON.stringify({ type, title, error: error.message }) + JSON.stringify({ type, title, error: error.message }), ); // send as plain } diff --git a/packages/client/App.js b/packages/client/App.js index 1d9c21f..5976825 100644 --- a/packages/client/App.js +++ b/packages/client/App.js @@ -1,6 +1,5 @@ /* eslint-disable import/no-duplicates */ import 'react-native-gesture-handler'; -import 'react-native-reanimated'; import 'expo-dev-client'; import { ActionSheetProvider } from '@expo/react-native-action-sheet'; import { @@ -48,7 +47,7 @@ if (Platform.OS === 'android') { ScreenOrientation.lockAsync( Settings.IS_TABLET ? ScreenOrientation.OrientationLock.LANDSCAPE - : ScreenOrientation.OrientationLock.PORTRAIT_UP + : ScreenOrientation.OrientationLock.PORTRAIT_UP, ).catch(console.warn); } diff --git a/packages/client/actions/index.js b/packages/client/actions/index.js index 8c67227..3a37ba9 100644 --- a/packages/client/actions/index.js +++ b/packages/client/actions/index.js @@ -1,3 +1,4 @@ +import Constants from 'expo-constants'; import * as Notifications from 'expo-notifications'; import { @@ -61,7 +62,7 @@ const doRegisterDevice = (dispatch, state, value = {}) => { if (__DEV__) { console.log( 'Update notification settings from remote', - notificationSettings + notificationSettings, ); } // update notification settings from server @@ -77,14 +78,14 @@ const doRegisterDevice = (dispatch, state, value = {}) => { }); } return Promise.resolve(); - } + }, ); }; const doRegisterDeviceForNotifications = ( { data: push_token } = {}, dispatch, - current_state + current_state, ) => { if (push_token) { return doRegisterDevice(dispatch, current_state, { @@ -92,11 +93,11 @@ const doRegisterDeviceForNotifications = ( }).then(() => push_token); } return Notifications.getExpoPushTokenAsync({ - experienceId: '@outatime/ambito-dolar', + projectId: Constants.expoConfig.extra.eas.projectId, }).then(({ data: push_token }) => doRegisterDevice(dispatch, current_state, { push_token }).then( - () => push_token - ) + () => push_token, + ), ); }; @@ -111,7 +112,7 @@ export const registerDeviceForNotifications = dispatch({ type: NOTIFICATIONS_REGISTER_SUCCESS, payload: push_token, - }) + }), ) .catch((error) => { if (__DEV__) { diff --git a/packages/client/app.config.js b/packages/client/app.config.js index e69411a..6c26d97 100644 --- a/packages/client/app.config.js +++ b/packages/client/app.config.js @@ -1,7 +1,7 @@ import 'dotenv/config'; -const version = '6.7.1'; -const buildNumber = 98; +const version = '6.8.0'; +const buildNumber = 99; const LIGHT_SPLASH = { image: './assets/splash-light.png', @@ -26,16 +26,14 @@ export default { name: 'Ámbito Dólar', slug: 'ambito-dolar', privacy: 'hidden', - /* runtimeVersion: { - policy: 'sdkVersion', - }, */ + runtimeVersion: { + policy: 'appVersion', + }, version, platforms: ['android', 'ios', 'web'], githubUrl: 'https://github.com/outaTiME/ambito-dolar/tree/master/packages/client', userInterfaceStyle: 'automatic', - // required by modal on iOS - backgroundColor: '#000000', icon: './assets/icon.png', notification: { icon: './assets/icon.notification.png', @@ -44,7 +42,7 @@ export default { // https://github.com/expo/expo/issues/11604#issuecomment-1018355394 androidStatusBar: { backgroundColor: '#00000000', - // translucent: false, + barStyle: 'dark-content', }, scheme: 'ambito-dolar', extra: { @@ -78,6 +76,7 @@ export default { }, updates: { enabled: false, + url: 'https://u.expo.dev/88dc0a10-eec5-11e8-bdb0-e9d94f6dfa7d', }, assetBundlePatterns: ['**/*'], plugins: [ @@ -94,24 +93,10 @@ export default { }, ], ], - [ - 'expo-screen-orientation', - { - initialOrientation: 'ALL', - }, - ], + // https://www.aronberezkin.com/posts/a-step-by-step-guide-to-writing-your-first-expo-config-plugin './plugins/withAndroidSplashScreen.js', - /* [ - 'expo-build-properties', - { - ios: { - flipper: false, - }, - }, - ], */ ], splash: LIGHT_SPLASH, - jsEngine: 'hermes', ios: { bundleIdentifier: 'im.outa.AmbitoDolar', buildNumber: buildNumber.toString(), @@ -166,17 +151,19 @@ export default { allowBackup: false, softwareKeyboardLayoutMode: 'pan', }, - hooks: { - postPublish: [ - { - file: 'sentry-expo/upload-sourcemaps', - config: { - organization: 'ambito-dolar', - project: 'expo', - // https://github.com/expo/sentry-expo/issues/256#issuecomment-1164017755 - // authToken: false, + ...(process.env.SENTRY_AUTH_TOKEN && { + hooks: { + postPublish: [ + { + file: 'sentry-expo/upload-sourcemaps', + config: { + organization: 'ambito-dolar', + project: 'expo', + // https://github.com/expo/sentry-expo/issues/256#issuecomment-1164017755 + // authToken: false, + }, }, - }, - ], - }, + ], + }, + }), }; diff --git a/packages/client/components/ActionButton.js b/packages/client/components/ActionButton.js index c8755a7..bb8e8db 100644 --- a/packages/client/components/ActionButton.js +++ b/packages/client/components/ActionButton.js @@ -59,7 +59,7 @@ export default ({ borderColor: Settings.getStrokeColor(theme), backgroundColor: Settings.getContentColor( theme, - alternativeBackground + alternativeBackground, ), overflow: 'hidden', }, diff --git a/packages/client/components/AnimatedChartView.js b/packages/client/components/AnimatedChartView.js index 5af74fe..6f321dc 100644 --- a/packages/client/components/AnimatedChartView.js +++ b/packages/client/components/AnimatedChartView.js @@ -95,7 +95,7 @@ export default ({ data, domain, color, selectionIndex, width, height }) => { x: [0, width], y: [height, 0], }), - [width, height] + [width, height], ); const d = React.useMemo( () => @@ -104,7 +104,7 @@ export default ({ data, domain, color, selectionIndex, width, height }) => { .x(({ x }) => scale(x, domain.x, range.x)) .y(({ y }) => scale(y, domain.y, range.y)) .curve(d3Shape.curveMonotoneX)(data), - [data, domain, range] + [data, domain, range], ); const length = useSharedValue(width); const isLoading = useSharedValue(true); @@ -132,7 +132,7 @@ export default ({ data, domain, color, selectionIndex, width, height }) => { // reset selection when last data point selectionIndex.value = index === data.length - 1 ? null : index; }, - [data] + [data], ); return ( <> diff --git a/packages/client/components/AnimatedConfettiView.js b/packages/client/components/AnimatedConfettiView.js index 4b14b32..8a6d1e0 100644 --- a/packages/client/components/AnimatedConfettiView.js +++ b/packages/client/components/AnimatedConfettiView.js @@ -46,7 +46,7 @@ const Confetti = (props) => { xVel: new Value(Math.random() * xVelMax - xVelMax / 2), yVel: new Value(Math.random() * yVelMax + yVelMax), angleVel: new Value( - (Math.random() * angleVelMax - angleVelMax / 2) * Math.PI + (Math.random() * angleVelMax - angleVelMax / 2) * Math.PI, ), delay: new Value(Math.floor(index / 10) * 0.3), elasticity: Math.random() * 0.9 + 0.1, @@ -102,18 +102,18 @@ const Confetti = (props) => { set(y, add(y, dy)), set(x, add(x, dx)), set(angle, add(angle, dAngle)), - ] - ) + ], + ), ), cond( greaterThan( x, - screenWidth - props.itemDimensions.width + screenWidth - props.itemDimensions.width, ), [ set(x, screenWidth - props.itemDimensions.width), set(xVel, multiply(xVel, -elasticity)), - ] + ], ), cond(lessThan(x, 0), [ set(x, 0), @@ -124,13 +124,13 @@ const Confetti = (props) => { cond( greaterThan( y, - screenHeight + props.itemDimensions.height + screenHeight + props.itemDimensions.height, ), - set(y, -props.itemDimensions.height * 2) - ) + set(y, -props.itemDimensions.height * 2), + ), ), ], - [startClock(clock), timeDiff] + [startClock(clock), timeDiff], ); }} @@ -155,7 +155,7 @@ const Confetti = (props) => { ); - } + }, )} ); diff --git a/packages/client/components/AnimatedSegmentedControl.js b/packages/client/components/AnimatedSegmentedControl.js index 7f528b7..22a7396 100644 --- a/packages/client/components/AnimatedSegmentedControl.js +++ b/packages/client/components/AnimatedSegmentedControl.js @@ -56,7 +56,7 @@ export default ({ (index) => { onChange(index); }, - [onChange] + [onChange], ); useEffect(() => { tabTranslateValue.value = currentIndex; @@ -66,7 +66,7 @@ export default ({ const tabTranslateAnimatedStyles = useAnimatedStyle(() => { const translateX = withSpring( tabTranslateValue.value * (translateValue * transitionMultiplier), - DEFAULT_SPRING_CONFIG + DEFAULT_SPRING_CONFIG, ); return { transform: [{ translateX }], diff --git a/packages/client/components/AppContainer.js b/packages/client/components/AppContainer.js index 6d3633e..338dd04 100644 --- a/packages/client/components/AppContainer.js +++ b/packages/client/components/AppContainer.js @@ -110,7 +110,7 @@ const useNavigatorScreenOptions = (modal = false) => { const { theme, fonts } = Helper.useTheme(); const headerBackground = React.useCallback( () => , - [] + [], ); return { headerBackVisible: false, @@ -211,7 +211,7 @@ const SettingsStackScreen = () => { name="AdvancedNotifications" options={({ route: { params }, navigation }) => ({ title: Helper.getScreenTitle( - AmbitoDolar.getNotificationTitle(params.type) + AmbitoDolar.getNotificationTitle(params.type), ), headerLeft: () => , })} @@ -275,7 +275,7 @@ const MainStackScreen = () => { const { theme } = Helper.useTheme(); const tabBarBackground = React.useCallback( () => , - [] + [], ); return ( { const uid = Settings.INSTALLATION_ID; @@ -437,7 +437,7 @@ const AppContainer = ({ lastNotificationResponse.actionIdentifier === Notifications.DEFAULT_ACTION_IDENTIFIER ) { - Amplitude.logEvent('Select notification'); + Amplitude.track('Select notification'); navigationRef.navigate('RatesTab', { screen: Settings.INITIAL_ROUTE_NAME, }); @@ -450,7 +450,7 @@ const AppContainer = ({ } const type = data?.type; if (type) { - Amplitude.logEvent('Quick action', { type }); + Amplitude.track('Quick action', { type }); navigationRef.navigate(`${type}Tab`, { screen: type, params: { @@ -464,7 +464,7 @@ const AppContainer = ({ initialQuickAction && onQuickAction(initialQuickAction); const subscription = DeviceEventEmitter.addListener( 'quickActionShortcut', - onQuickAction + onQuickAction, ); return () => { subscription.remove(); @@ -491,7 +491,7 @@ const AppContainer = ({ React.useEffect(() => { Linking.getInitialURL().then(onDeepLink); const subscription = Linking.addEventListener('url', ({ url }) => - onDeepLink(url) + onDeepLink(url), ); return () => subscription.remove(); }, []); @@ -523,7 +523,7 @@ const AppContainer = ({ border: Settings.getSeparatorColor(theme), }, }), - [theme] + [theme], ); const navigatorScreenOptions = useNavigatorScreenOptions(); const statusBarStyle = Helper.getInvertedTheme(theme); @@ -649,7 +649,7 @@ const withRealtime = (Component) => (props) => { clearTimeout(timer_id); }); }, - [dispatch] + [dispatch], ); // UPDATE CHECK const updatedAt = useSelector((state) => state.rates.updated_at); @@ -681,7 +681,7 @@ const withRealtime = (Component) => (props) => { console.log( '⚡️ Firebase updated', updated_at, - updatedAtRef.current + updatedAtRef.current, ); } if (updated_at !== updatedAtRef.current) { @@ -728,7 +728,7 @@ const withAppUpdateCheck = (Component) => (props) => { invalidVersion, ignoreUpdate, }), - shallowEqual + shallowEqual, ); const dispatch = useDispatch(); let shouldIgnoreUpdate = false; @@ -807,7 +807,7 @@ const withUserActivity = (Component) => (props) => { version, appUpdated, }), - shallowEqual + shallowEqual, ); const isActiveAppState = useAppState('active'); const dispatch = useDispatch(); @@ -815,7 +815,7 @@ const withUserActivity = (Component) => (props) => { const alreadyHandlingRef = React.useRef(false); const [, setAllowNotifications] = Helper.useSharedState( 'allowNotifications', - false + false, ); React.useEffect(() => { // only took values from the store when the app state is active or on startup @@ -857,7 +857,7 @@ const withUserActivity = (Component) => (props) => { if (__DEV__) { console.log( 'Device is already registered to receive notifications', - pushToken + pushToken, ); } } else { @@ -885,7 +885,7 @@ const withUserActivity = (Component) => (props) => { const current_date = DateUtils.get(); const days_from_update = current_date.diff( appUpdated ?? Date.now(), - 'days' + 'days', ); // https://www.raywenderlich.com/9009-requesting-app-ratings-and-reviews-tutorial-for-ios if ( @@ -925,5 +925,5 @@ export default compose( withAppUpdateCheck, withAppStatistics, withUserActivity, - withContainer(true) + withContainer(true), )(AppContainer); diff --git a/packages/client/components/AppContainer.web.js b/packages/client/components/AppContainer.web.js index e7fb406..017cd5d 100644 --- a/packages/client/components/AppContainer.web.js +++ b/packages/client/components/AppContainer.web.js @@ -96,11 +96,11 @@ const StatView = ({ title, current, change }) => { change = parseFloat(change); const color = React.useMemo( () => Helper.getChangeColor(change, theme), - [change, theme] + [change, theme], ); const change_fmt = React.useMemo( () => AmbitoDolar.getRateChange(change, true), - [change] + [change], ); return ( @@ -145,131 +145,133 @@ const StatView = ({ title, current, change }) => { ); }; -const FundingContainer = compose(withStats)( - ({ title, users, events, conversions }) => { - const { theme, fonts } = Helper.useTheme(); - const currentMonth = DateUtils.get().format('MMMM YYYY'); - return ( - +const FundingContainer = compose(withStats)(({ + title, + users, + events, + conversions, +}) => { + const { theme, fonts } = Helper.useTheme(); + const currentMonth = DateUtils.get().format('MMMM YYYY'); + return ( + + - + + {title || `Métricas de ${AmbitoDolar.getCapitalized(currentMonth)}`} + + + + + + + {false && ( + + )} + + + - - + {false && ( + - {title || - `Métricas de ${AmbitoDolar.getCapitalized(currentMonth)}`} - - - - - - - {false && ( - - )} - + )} - - {`${Settings.APP_NAME} opera de forma transparente compartiendo sus métricas mensuales con la comunidad.`} - - {false && ( - - )} - - - + - - ); - } -); + + + ); +}); const withRates = (Component) => (props) => { const { theme } = Helper.useTheme(); @@ -319,11 +321,11 @@ const RatesContainer = compose(withRates)(({ title, rates, processedAt }) => { const { theme, fonts } = Helper.useTheme(); const rateTypes = React.useMemo( () => Object.keys(rates) /*.slice(0, -1)*/, - [rates] + [rates], ); const rows = React.useMemo( () => _.chunk(rateTypes, LAYOUT_RATE_COLUMNS), - [rateTypes] + [rateTypes], ); const condensed = rows.length > 4; const getItemView = React.useCallback( @@ -338,7 +340,7 @@ const RatesContainer = compose(withRates)(({ title, rates, processedAt }) => { }} /> ), - [rates, condensed] + [rates, condensed], ); return ( diff --git a/packages/client/components/CardView.js b/packages/client/components/CardView.js index 6df4e54..e8457ef 100644 --- a/packages/client/components/CardView.js +++ b/packages/client/components/CardView.js @@ -57,7 +57,7 @@ export default ({ ), ]; }), - [children, isModal] + [children, isModal], ); return ( - ) + ), ); diff --git a/packages/client/components/FixedFlatList.js b/packages/client/components/FixedFlatList.js index 216ed38..48a5700 100644 --- a/packages/client/components/FixedFlatList.js +++ b/packages/client/components/FixedFlatList.js @@ -129,7 +129,7 @@ const FixedFlatList = ({ ); }, - [theme, data, isModal] + [theme, data, isModal], ); const separatorComponent = React.useCallback( () => ( @@ -143,15 +143,15 @@ const FixedFlatList = ({ ), - [theme, isModal] + [theme, isModal], ); const headerComponent = React.useCallback( () => , - [ListHeaderComponent, title] + [ListHeaderComponent, title], ); const footerComponent = React.useCallback( () => , - [ListFooterComponent, note] + [ListFooterComponent, note], ); const extraData = React.useMemo(() => Date.now(), [theme, data]); return ( diff --git a/packages/client/components/RateView.js b/packages/client/components/RateView.js index c91eb0d..dd54527 100644 --- a/packages/client/components/RateView.js +++ b/packages/client/components/RateView.js @@ -160,6 +160,7 @@ const InlineRateDetailView = ({ style={[ fonts.subhead, { + // FIXME: took width from container and center the chart width: 140, textAlign: 'right', color, @@ -186,23 +187,23 @@ export default ({ const { theme } = Helper.useTheme(); const [timestamp, value, change] = React.useMemo( () => stats[stats.length - 1], - [stats] + [stats], ); const color = React.useMemo( () => Helper.getChangeColor(change, theme), - [change, theme] + [change, theme], ); const value_fmt = React.useMemo( () => Helper.getInlineRateValue(value), - [value] + [value], ); const timestamp_fmt = React.useMemo( () => DateUtils.humanize(timestamp, 1), - [timestamp] + [timestamp], ); const change_fmt = React.useMemo( () => AmbitoDolar.getRateChange(stats[stats.length - 1], true), - [stats] + [stats], ); const onPress = React.useCallback(() => onSelected(type), [onSelected, type]); return ( diff --git a/packages/client/components/VictoryMiniRateChartView.js b/packages/client/components/VictoryMiniRateChartView.js index 5847a5b..69399b0 100644 --- a/packages/client/components/VictoryMiniRateChartView.js +++ b/packages/client/components/VictoryMiniRateChartView.js @@ -21,7 +21,7 @@ const VictoryMiniRateChartView = ({ // prevent rendering issues when values are close to 0 y0: -Settings.PADDING * 2, })), - [stats] + [stats], ); // data normalization const sell_rates = React.useMemo(() => data.map(({ y }) => y), [data]); @@ -34,7 +34,7 @@ const VictoryMiniRateChartView = ({ x: [min_x, max_x], y: min_y === max_y ? [min_y - 0.1, max_y + 0.1] : [min_y, max_y], }), - [min_x, max_x, min_y, max_y] + [min_x, max_x, min_y, max_y], ); const area_style = React.useMemo( () => ({ @@ -46,7 +46,7 @@ const VictoryMiniRateChartView = ({ fillOpacity: 0.15, }, }), - [color] + [color], ); return ( { selectionIndex.value === null ? stats[stats.length - 1] : stats[clamp(selectionIndex.value, 0, stats.length - 1)], - [stats] + [stats], ); const timestamp_props = useAnimatedProps(() => ({ text: selected_stat.value.timestamp, @@ -145,7 +145,7 @@ const InteractiveRateChartView = ({ bottom: AXIS_OFFSET + axis_font_height_rounded, left: AXIS_OFFSET + axis_y_width_rounded, }), - [axis_y_width_rounded, axis_font_height_rounded] + [axis_y_width_rounded, axis_font_height_rounded], ); const overlay_style = React.useMemo( () => ({ @@ -159,12 +159,12 @@ const InteractiveRateChartView = ({ height - (AXIS_OFFSET + axis_font_height_rounded + Settings.PADDING * 2), }), - [axis_y_width_rounded, axis_font_height_rounded] + [axis_y_width_rounded, axis_font_height_rounded], ); const axis_x_format = React.useCallback( // invalid values when animated (value) => stats[Math.round(value)]?.timestamp_axis, - [stats] + [stats], ); const axis_x_style = React.useMemo( () => ({ @@ -191,11 +191,11 @@ const InteractiveRateChartView = ({ fontFamily: processFontFamily(Settings.getFontObject().fontFamily), }, }), - [theme] + [theme], ); const axis_y_format = React.useCallback( (value) => Helper.getCurrency(value), - [] + [], ); const axis_y_style = React.useMemo( () => ({ @@ -221,11 +221,11 @@ const InteractiveRateChartView = ({ fontFamily: processFontFamily(Settings.getFontObject().fontFamily), }, }), - [theme] + [theme], ); const color = React.useMemo( () => stats[stats.length - 1].change_color, - [stats] + [stats], ); const transparent_axis_style = React.useMemo( () => ({ @@ -233,7 +233,7 @@ const InteractiveRateChartView = ({ ticks: { stroke: 'transparent' }, tickLabels: { fill: 'transparent' }, }), - [] + [], ); const area_style = React.useMemo( () => ({ @@ -245,7 +245,7 @@ const InteractiveRateChartView = ({ fillOpacity: 0.15, }, }), - [color] + [color], ); if (!axis_y_width_rounded && !axis_font_height_rounded) { const fontSize = AXIS_FONT_SIZE; @@ -328,7 +328,7 @@ const InteractiveRateChartView = ({ fill: Settings.getStrokeColor(theme), // https://github.com/expo/expo/issues/1959#issuecomment-780198250 fontFamily: processFontFamily( - Settings.getFontObject().fontFamily + Settings.getFontObject().fontFamily, ), }} /> @@ -381,7 +381,7 @@ export default ({ stats }) => { // prevent rendering issues when values are close to 0 y0: -Settings.PADDING * 2, })), - [stats] + [stats], ); // data normalization const sell_rates = React.useMemo(() => data.map(({ y }) => y), [data]); @@ -394,7 +394,7 @@ export default ({ stats }) => { x: [min_x, max_x], y: min_y === max_y ? [min_y - 0.1, max_y + 0.1] : [min_y, max_y], }), - [min_x, max_x, min_y, max_y] + [min_x, max_x, min_y, max_y], ); // add formatted data to stats (required by worklets) const { theme } = Helper.useTheme(); @@ -411,7 +411,7 @@ export default ({ stats }) => { change_color: Helper.getChangeColor(stat[2], theme), }), })), - [stats, theme] + [stats, theme], ); // shared const selection_index = useSharedValue(null); diff --git a/packages/client/components/withContainer.js b/packages/client/components/withContainer.js index 2e0f36e..14c18ca 100644 --- a/packages/client/components/withContainer.js +++ b/packages/client/components/withContainer.js @@ -10,7 +10,7 @@ export default (alternativeBackground) => (Component) => (props) => { const background_color = Settings.getBackgroundColor( theme, alternativeBackground, - isModal + isModal, ); const container_style = React.useMemo( () => ({ @@ -18,7 +18,7 @@ export default (alternativeBackground) => (Component) => (props) => { justifyContent: 'center', backgroundColor: background_color, }), - [background_color] + [background_color], ); return ( diff --git a/packages/client/components/withScreenshotShareSheet.js b/packages/client/components/withScreenshotShareSheet.js index 76d6314..290c866 100644 --- a/packages/client/components/withScreenshotShareSheet.js +++ b/packages/client/components/withScreenshotShareSheet.js @@ -112,7 +112,7 @@ const withScreenshotShareSheet = (action_opts) => (Component) => (props) => { initial: false, }); */ } else if (button_name === share_opt) { - Amplitude.logEvent('Share rates'); + Amplitude.track('Share rates'); captureRef(shareViewContainerRef.current, { result: 'data-uri', }).then( @@ -134,13 +134,13 @@ const withScreenshotShareSheet = (action_opts) => (Component) => (props) => { (error) => console.error( 'Unable to generate view snapshot', - error - ) + error, + ), ); } else if (button_name === crash_opt) { throw new Error('Force application crash'); } - } + }, ); }); }} @@ -168,7 +168,7 @@ const withScreenshotShareSheet = (action_opts) => (Component) => (props) => { [ // ignore ], - { compress: 1, format: ImageManipulator.SaveFormat.PNG } + { compress: 1, format: ImageManipulator.SaveFormat.PNG }, ); if (__DEV__) { console.log('Snapshot for sharing', new_uri); @@ -199,7 +199,7 @@ const withScreenshotShareSheet = (action_opts) => (Component) => (props) => { .catch(console.warn); }, (error) => - console.error('Unable to generate the snapshot for sharing', error) + console.error('Unable to generate the snapshot for sharing', error), ) .finally(() => { // reset diff --git a/packages/client/config/settings.js b/packages/client/config/settings.js index bd5ad84..9ad69a5 100644 --- a/packages/client/config/settings.js +++ b/packages/client/config/settings.js @@ -1,16 +1,14 @@ -// import * as Application from 'expo-application'; import Constants from 'expo-constants'; -//import * as Updates from 'expo-updates'; +import * as Device from 'expo-device'; import { Dimensions, Platform } from 'react-native'; -import DeviceInfo from 'react-native-device-info'; import { human, iOSColors } from 'react-native-typography'; const PADDING = 16; const SMALL_PADDING = PADDING / 4; -const DEVICE_TYPE = DeviceInfo.getDeviceType(); -const IS_TABLET = DEVICE_TYPE === 'Tablet'; -const IS_HANDSET = DEVICE_TYPE === 'Handset'; +const DEVICE_TYPE = Device.deviceType; +const IS_TABLET = DEVICE_TYPE === Device.DeviceType.TABLET; +const IS_HANDSET = DEVICE_TYPE === Device.DeviceType.PHONE; const IS_IPAD = Platform.OS === 'ios' && IS_TABLET; const HAPTICS_ENABLED = Platform.OS === 'ios'; @@ -47,7 +45,7 @@ const ICON_SIZE = 24; const SOCIAL_ICON_SIZE = 17; const APP_IGNORE_UPDATE_EXPIRATION = 30 * 24 * 60 * 60 * 1000; // 30 days const { - manifest: { + expoConfig: { name: APP_NAME, version: APP_VERSION, revisionId: APP_REVISION_ID, @@ -66,14 +64,6 @@ const { }, installationId: INSTALLATION_ID, } = Constants; -/* const { - applicationId: APP_ID, - applicationName: APP_NAME, - nativeApplicationVersion: APP_VERSION, -} = Application; */ -/* const { - manifest: { revisionId: APP_REVISION_ID }, -} = Updates; */ const APP_COPYRIGHT = `© ${new Date().getFullYear()} ${APP_NAME}`; const APP_DOMAIN = 'ambito-dolar.app'; const WEBSITE_URL = `https://${APP_DOMAIN}`; diff --git a/packages/client/eas.json b/packages/client/eas.json index a2815bd..7eba779 100644 --- a/packages/client/eas.json +++ b/packages/client/eas.json @@ -1,17 +1,20 @@ { "cli": { - "version": ">= 0.52.0" + "version": ">= 4.1.2" }, "build": { "fast": { "ios": { - "resourceClass": "m-medium" - } + "resourceClass": "m-medium", + "image": "latest" + }, + "channel": "fast" }, "development": { "extends": "fast", "developmentClient": true, - "distribution": "internal" + "distribution": "internal", + "channel": "development" }, "preview": { "extends": "fast", @@ -26,7 +29,8 @@ "extends": "development", "ios": { "simulator": true - } + }, + "channel": "simulator" } }, "submit": { diff --git a/packages/client/hooks/useColorScheme.js b/packages/client/hooks/useColorScheme.js index df3975e..513f5f1 100644 --- a/packages/client/hooks/useColorScheme.js +++ b/packages/client/hooks/useColorScheme.js @@ -20,7 +20,7 @@ const useColorScheme = () => { const appearance = useSelector((state) => state.application.appearance); const colorScheme = _useColorScheme(); const [currentScheme, setCurrentScheme] = React.useState( - appearance ?? colorScheme + appearance ?? colorScheme, ); const isActiveAppState = useAppState('active'); React.useEffect(() => { diff --git a/packages/client/ios/Podfile b/packages/client/ios/Podfile index e077090..b49bfa5 100644 --- a/packages/client/ios/Podfile +++ b/packages/client/ios/Podfile @@ -1,11 +1,11 @@ require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") -require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules") require 'json' podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] platform :ios, podfile_properties['ios.deploymentTarget'] || '13.0' install! 'cocoapods', @@ -61,8 +61,6 @@ target 'mbitoDlar' do react_native_post_install( installer, config[:reactNativePath], - # Set `mac_catalyst_enabled` to `true` in order to apply patches - # necessary for Mac Catalyst builds :mac_catalyst_enabled => false ) __apply_Xcode_12_5_M1_post_install_workaround(installer) diff --git a/packages/client/ios/Podfile.lock b/packages/client/ios/Podfile.lock index 3d8b584..fd20e9c 100644 --- a/packages/client/ios/Podfile.lock +++ b/packages/client/ios/Podfile.lock @@ -1,161 +1,146 @@ PODS: - - Amplitude (8.16.3): - - AnalyticsConnector (~> 1.0.0) - - amplitude-react-native (2.17.2): - - Amplitude (= 8.16.3) + - amplitude-react-native (1.4.4): - React-Core - - AnalyticsConnector (1.0.1) - ASN1Decoder (1.8.0) - boost (1.76.0) - DoubleConversion (1.1.6) - - EASClient (0.5.1): + - EASClient (0.6.0): - ExpoModulesCore - - EXApplication (5.1.1): + - EXApplication (5.3.1): - ExpoModulesCore - - EXConstants (14.2.1): + - EXConstants (14.4.2): - ExpoModulesCore - - EXFileSystem (15.2.2): + - EXFileSystem (15.4.4): - ExpoModulesCore - - EXFont (11.1.1): + - EXFont (11.4.0): - ExpoModulesCore - - EXImageLoader (4.1.1): + - EXImageLoader (4.3.0): - ExpoModulesCore - React-Core - - EXJSONUtils (0.5.1) - - EXManifests (0.5.2): - - EXJSONUtils - - EXNotifications (0.18.1): + - EXJSONUtils (0.7.1) + - EXManifests (0.7.2): - ExpoModulesCore - - Expo (48.0.20): + - EXNotifications (0.20.1): - ExpoModulesCore - - expo-dev-client (2.2.1): + - Expo (49.0.13): + - ExpoModulesCore + - expo-dev-client (2.4.11): - EXManifests - expo-dev-launcher - expo-dev-menu - expo-dev-menu-interface - EXUpdatesInterface - - expo-dev-launcher (2.2.1): + - expo-dev-launcher (2.4.13): - EXManifests - - expo-dev-launcher/Main (= 2.2.1) + - expo-dev-launcher/Main (= 2.4.13) - expo-dev-menu - expo-dev-menu-interface - ExpoModulesCore - EXUpdatesInterface + - RCT-Folly (= 2021.07.22.00) - React-Core - - expo-dev-launcher/Main (2.2.1): + - React-RCTAppDelegate + - expo-dev-launcher/Main (2.4.13): - EXManifests - expo-dev-launcher/Unsafe - expo-dev-menu - expo-dev-menu-interface - ExpoModulesCore - EXUpdatesInterface + - RCT-Folly (= 2021.07.22.00) - React-Core - - expo-dev-launcher/Unsafe (2.2.1): + - React-RCTAppDelegate + - expo-dev-launcher/Unsafe (2.4.13): - EXManifests - expo-dev-menu - expo-dev-menu-interface - ExpoModulesCore - EXUpdatesInterface + - RCT-Folly (= 2021.07.22.00) + - React-Core + - React-RCTAppDelegate + - expo-dev-menu (3.2.1): + - expo-dev-menu/Main (= 3.2.1) + - RCT-Folly (= 2021.07.22.00) - React-Core - - expo-dev-menu (2.2.0): - - expo-dev-menu/Main (= 2.2.0) - - expo-dev-menu-interface (1.1.1) - - expo-dev-menu/GestureHandler (2.2.0) - - expo-dev-menu/Main (2.2.0): + - expo-dev-menu-interface (1.3.0) + - expo-dev-menu/Main (3.2.1): - EXManifests - expo-dev-menu-interface - expo-dev-menu/Vendored - ExpoModulesCore + - RCT-Folly (= 2021.07.22.00) - React-Core - - expo-dev-menu/Reanimated (2.2.0): - - DoubleConversion - - FBLazyVector - - FBReactNativeSpec - - glog - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React-callinvoker + - expo-dev-menu/SafeAreaView (3.2.1): + - ExpoModulesCore + - RCT-Folly (= 2021.07.22.00) - React-Core - - React-Core/DevSupport - - React-Core/RCTWebSocket - - React-CoreModules - - React-cxxreact - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-RCTActionSheet - - React-RCTAnimation - - React-RCTBlob - - React-RCTImage - - React-RCTLinking - - React-RCTNetwork - - React-RCTSettings - - React-RCTText - - React-RCTVibration - - ReactCommon/turbomodule/core - - Yoga - - expo-dev-menu/SafeAreaView (2.2.0) - - expo-dev-menu/Vendored (2.2.0): - - expo-dev-menu/GestureHandler - - expo-dev-menu/Reanimated + - expo-dev-menu/Vendored (3.2.1): - expo-dev-menu/SafeAreaView - - ExpoBlur (12.3.2): + - RCT-Folly (= 2021.07.22.00) + - React-Core + - ExpoBlur (12.4.1): - ExpoModulesCore - - ExpoClipboard (4.1.2): + - ExpoClipboard (4.3.1): - ExpoModulesCore - - ExpoDevice (5.2.1): + - ExpoDevice (5.4.0): - ExpoModulesCore - - ExpoHaptics (12.2.1): + - ExpoHaptics (12.4.0): - ExpoModulesCore - - ExpoImageManipulator (11.1.1): + - ExpoImageManipulator (11.3.0): - EXImageLoader - ExpoModulesCore - - ExpoKeepAwake (12.0.1): + - ExpoKeepAwake (12.3.0): - ExpoModulesCore - - ExpoLocalization (14.1.1): + - ExpoLocalization (14.3.0): - ExpoModulesCore - - ExpoMailComposer (12.1.1): + - ExpoMailComposer (12.3.0): - ExpoModulesCore - - ExpoModulesCore (1.2.7): + - ExpoModulesCore (1.5.11): + - RCT-Folly (= 2021.07.22.00) - React-Core + - React-NativeModulesApple - React-RCTAppDelegate - ReactCommon/turbomodule/core - - ExpoStoreReview (6.2.1): + - ExpoScreenOrientation (6.0.5): - ExpoModulesCore - - ExpoSystemUI (2.2.1): + - RCT-Folly (= 2021.07.22.00) + - React-Core + - ExpoSharing (11.5.0): - ExpoModulesCore - - EXScreenOrientation (5.1.1): + - ExpoStoreReview (6.4.0): - ExpoModulesCore - - React-Core - - EXSharing (11.2.2): + - ExpoSystemUI (2.4.0): - ExpoModulesCore - - EXSplashScreen (0.18.2): + - EXSplashScreen (0.20.5): - ExpoModulesCore + - RCT-Folly (= 2021.07.22.00) - React-Core - - EXStructuredHeaders (3.1.2) - - EXUpdates (0.16.4): + - EXStructuredHeaders (3.3.0) + - EXUpdates (0.18.14): - ASN1Decoder (~> 1.8) - EASClient - EXManifests - ExpoModulesCore - EXStructuredHeaders - EXUpdatesInterface + - RCT-Folly (= 2021.07.22.00) + - ReachabilitySwift - React-Core - - EXUpdatesInterface (0.9.3) - - FBLazyVector (0.71.8) - - FBReactNativeSpec (0.71.8): - - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.71.8) - - RCTTypeSafety (= 0.71.8) - - React-Core (= 0.71.8) - - React-jsi (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) + - EXUpdatesInterface (0.10.1) + - FBLazyVector (0.72.5) + - FBReactNativeSpec (0.72.5): + - RCT-Folly (= 2021.07.22.00) + - RCTRequired (= 0.72.5) + - RCTTypeSafety (= 0.72.5) + - React-Core (= 0.72.5) + - React-jsi (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) - fmt (6.2.1) - glog (0.3.5) - - hermes-engine (0.71.8): - - hermes-engine/Pre-built (= 0.71.8) - - hermes-engine/Pre-built (0.71.8) + - hermes-engine (0.72.5): + - hermes-engine/Pre-built (= 0.72.5) + - hermes-engine/Pre-built (0.72.5) - libevent (2.1.12) - RCT-Folly (2021.07.22.00): - boost @@ -174,27 +159,30 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.71.8) - - RCTTypeSafety (0.71.8): - - FBLazyVector (= 0.71.8) - - RCTRequired (= 0.71.8) - - React-Core (= 0.71.8) - - React (0.71.8): - - React-Core (= 0.71.8) - - React-Core/DevSupport (= 0.71.8) - - React-Core/RCTWebSocket (= 0.71.8) - - React-RCTActionSheet (= 0.71.8) - - React-RCTAnimation (= 0.71.8) - - React-RCTBlob (= 0.71.8) - - React-RCTImage (= 0.71.8) - - React-RCTLinking (= 0.71.8) - - React-RCTNetwork (= 0.71.8) - - React-RCTSettings (= 0.71.8) - - React-RCTText (= 0.71.8) - - React-RCTVibration (= 0.71.8) - - React-callinvoker (0.71.8) - - React-Codegen (0.71.8): + - RCTRequired (0.72.5) + - RCTTypeSafety (0.72.5): + - FBLazyVector (= 0.72.5) + - RCTRequired (= 0.72.5) + - React-Core (= 0.72.5) + - ReachabilitySwift (5.0.0) + - React (0.72.5): + - React-Core (= 0.72.5) + - React-Core/DevSupport (= 0.72.5) + - React-Core/RCTWebSocket (= 0.72.5) + - React-RCTActionSheet (= 0.72.5) + - React-RCTAnimation (= 0.72.5) + - React-RCTBlob (= 0.72.5) + - React-RCTImage (= 0.72.5) + - React-RCTLinking (= 0.72.5) + - React-RCTNetwork (= 0.72.5) + - React-RCTSettings (= 0.72.5) + - React-RCTText (= 0.72.5) + - React-RCTVibration (= 0.72.5) + - React-callinvoker (0.72.5) + - React-Codegen (0.72.5): + - DoubleConversion - FBReactNativeSpec + - glog - hermes-engine - RCT-Folly - RCTRequired @@ -202,319 +190,392 @@ PODS: - React-Core - React-jsi - React-jsiexecutor + - React-NativeModulesApple + - React-rncore - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.71.8): + - React-Core (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.8) - - React-cxxreact (= 0.71.8) + - React-Core/Default (= 0.72.5) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/CoreModulesHeaders (0.71.8): + - React-Core/CoreModulesHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/Default (0.71.8): + - React-Core/Default (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/DevSupport (0.71.8): + - React-Core/DevSupport (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.8) - - React-Core/RCTWebSocket (= 0.71.8) - - React-cxxreact (= 0.71.8) + - React-Core/Default (= 0.72.5) + - React-Core/RCTWebSocket (= 0.72.5) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-jsinspector (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-jsinspector (= 0.72.5) + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.71.8): + - React-Core/RCTActionSheetHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTAnimationHeaders (0.71.8): + - React-Core/RCTAnimationHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTBlobHeaders (0.71.8): + - React-Core/RCTBlobHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTImageHeaders (0.71.8): + - React-Core/RCTImageHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTLinkingHeaders (0.71.8): + - React-Core/RCTLinkingHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTNetworkHeaders (0.71.8): + - React-Core/RCTNetworkHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTSettingsHeaders (0.71.8): + - React-Core/RCTSettingsHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTTextHeaders (0.71.8): + - React-Core/RCTTextHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTVibrationHeaders (0.71.8): + - React-Core/RCTVibrationHeaders (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.8) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTWebSocket (0.71.8): + - React-Core/RCTWebSocket (0.72.5): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.8) - - React-cxxreact (= 0.71.8) + - React-Core/Default (= 0.72.5) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.8) - - React-jsiexecutor (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-CoreModules (0.71.8): + - React-CoreModules (0.72.5): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.8) - - React-Codegen (= 0.71.8) - - React-Core/CoreModulesHeaders (= 0.71.8) - - React-jsi (= 0.71.8) + - RCTTypeSafety (= 0.72.5) + - React-Codegen (= 0.72.5) + - React-Core/CoreModulesHeaders (= 0.72.5) + - React-jsi (= 0.72.5) - React-RCTBlob - - React-RCTImage (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) - - React-cxxreact (0.71.8): + - React-RCTImage (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) + - SocketRocket (= 0.6.1) + - React-cxxreact (0.72.5): - boost (= 1.76.0) - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.8) - - React-jsi (= 0.71.8) - - React-jsinspector (= 0.71.8) - - React-logger (= 0.71.8) - - React-perflogger (= 0.71.8) - - React-runtimeexecutor (= 0.71.8) - - React-hermes (0.71.8): + - React-callinvoker (= 0.72.5) + - React-debug (= 0.72.5) + - React-jsi (= 0.72.5) + - React-jsinspector (= 0.72.5) + - React-logger (= 0.72.5) + - React-perflogger (= 0.72.5) + - React-runtimeexecutor (= 0.72.5) + - React-debug (0.72.5) + - React-hermes (0.72.5): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.71.8) + - React-cxxreact (= 0.72.5) - React-jsi - - React-jsiexecutor (= 0.71.8) - - React-jsinspector (= 0.71.8) - - React-perflogger (= 0.71.8) - - React-jsi (0.71.8): + - React-jsiexecutor (= 0.72.5) + - React-jsinspector (= 0.72.5) + - React-perflogger (= 0.72.5) + - React-jsi (0.72.5): - boost (= 1.76.0) - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.71.8): + - React-jsiexecutor (0.72.5): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.8) - - React-jsi (= 0.71.8) - - React-perflogger (= 0.71.8) - - React-jsinspector (0.71.8) - - React-logger (0.71.8): + - React-cxxreact (= 0.72.5) + - React-jsi (= 0.72.5) + - React-perflogger (= 0.72.5) + - React-jsinspector (0.72.5) + - React-logger (0.72.5): - glog - react-native-animateable-text (0.11.0): - React-Core - - react-native-safe-area-context (4.7.1): + - react-native-safe-area-context (4.7.2): - React-Core - react-native-segmented-control (2.4.2): - React-Core - react-native-view-shot (3.7.0): - React-Core - - React-perflogger (0.71.8) - - React-RCTActionSheet (0.71.8): - - React-Core/RCTActionSheetHeaders (= 0.71.8) - - React-RCTAnimation (0.71.8): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.8) - - React-Codegen (= 0.71.8) - - React-Core/RCTAnimationHeaders (= 0.71.8) - - React-jsi (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) - - React-RCTAppDelegate (0.71.8): + - React-NativeModulesApple (0.72.5): + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.72.5) + - React-RCTActionSheet (0.72.5): + - React-Core/RCTActionSheetHeaders (= 0.72.5) + - React-RCTAnimation (0.72.5): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.5) + - React-Codegen (= 0.72.5) + - React-Core/RCTAnimationHeaders (= 0.72.5) + - React-jsi (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) + - React-RCTAppDelegate (0.72.5): - RCT-Folly - RCTRequired - RCTTypeSafety - React-Core + - React-CoreModules + - React-hermes + - React-NativeModulesApple + - React-RCTImage + - React-RCTNetwork + - React-runtimescheduler - ReactCommon/turbomodule/core - - React-RCTBlob (0.71.8): + - React-RCTBlob (0.72.5): + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.72.5) + - React-Core/RCTBlobHeaders (= 0.72.5) + - React-Core/RCTWebSocket (= 0.72.5) + - React-jsi (= 0.72.5) + - React-RCTNetwork (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) + - React-RCTImage (0.72.5): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.5) + - React-Codegen (= 0.72.5) + - React-Core/RCTImageHeaders (= 0.72.5) + - React-jsi (= 0.72.5) + - React-RCTNetwork (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) + - React-RCTLinking (0.72.5): + - React-Codegen (= 0.72.5) + - React-Core/RCTLinkingHeaders (= 0.72.5) + - React-jsi (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) + - React-RCTNetwork (0.72.5): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.5) + - React-Codegen (= 0.72.5) + - React-Core/RCTNetworkHeaders (= 0.72.5) + - React-jsi (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) + - React-RCTSettings (0.72.5): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.5) + - React-Codegen (= 0.72.5) + - React-Core/RCTSettingsHeaders (= 0.72.5) + - React-jsi (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) + - React-RCTText (0.72.5): + - React-Core/RCTTextHeaders (= 0.72.5) + - React-RCTVibration (0.72.5): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.72.5) + - React-Core/RCTVibrationHeaders (= 0.72.5) + - React-jsi (= 0.72.5) + - ReactCommon/turbomodule/core (= 0.72.5) + - React-rncore (0.72.5) + - React-runtimeexecutor (0.72.5): + - React-jsi (= 0.72.5) + - React-runtimescheduler (0.72.5): + - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.8) - - React-Core/RCTBlobHeaders (= 0.71.8) - - React-Core/RCTWebSocket (= 0.71.8) - - React-jsi (= 0.71.8) - - React-RCTNetwork (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) - - React-RCTImage (0.71.8): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.8) - - React-Codegen (= 0.71.8) - - React-Core/RCTImageHeaders (= 0.71.8) - - React-jsi (= 0.71.8) - - React-RCTNetwork (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) - - React-RCTLinking (0.71.8): - - React-Codegen (= 0.71.8) - - React-Core/RCTLinkingHeaders (= 0.71.8) - - React-jsi (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) - - React-RCTNetwork (0.71.8): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.8) - - React-Codegen (= 0.71.8) - - React-Core/RCTNetworkHeaders (= 0.71.8) - - React-jsi (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) - - React-RCTSettings (0.71.8): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.8) - - React-Codegen (= 0.71.8) - - React-Core/RCTSettingsHeaders (= 0.71.8) - - React-jsi (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) - - React-RCTText (0.71.8): - - React-Core/RCTTextHeaders (= 0.71.8) - - React-RCTVibration (0.71.8): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.8) - - React-Core/RCTVibrationHeaders (= 0.71.8) - - React-jsi (= 0.71.8) - - ReactCommon/turbomodule/core (= 0.71.8) - - React-runtimeexecutor (0.71.8): - - React-jsi (= 0.71.8) - - ReactCommon/turbomodule/bridging (0.71.8): + - React-callinvoker + - React-debug + - React-jsi + - React-runtimeexecutor + - React-utils (0.72.5): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-debug + - ReactCommon/turbomodule/bridging (0.72.5): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.8) - - React-Core (= 0.71.8) - - React-cxxreact (= 0.71.8) - - React-jsi (= 0.71.8) - - React-logger (= 0.71.8) - - React-perflogger (= 0.71.8) - - ReactCommon/turbomodule/core (0.71.8): + - React-callinvoker (= 0.72.5) + - React-cxxreact (= 0.72.5) + - React-jsi (= 0.72.5) + - React-logger (= 0.72.5) + - React-perflogger (= 0.72.5) + - ReactCommon/turbomodule/core (0.72.5): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.8) - - React-Core (= 0.71.8) - - React-cxxreact (= 0.71.8) - - React-jsi (= 0.71.8) - - React-logger (= 0.71.8) - - React-perflogger (= 0.71.8) + - React-callinvoker (= 0.72.5) + - React-cxxreact (= 0.72.5) + - React-jsi (= 0.72.5) + - React-logger (= 0.72.5) + - React-perflogger (= 0.72.5) - ReactNativeWidgetKit (0.2.0): - ExpoModulesCore - - RNDeviceInfo (10.8.0): + - RNCAsyncStorage (1.19.3): - React-Core - - RNFlashList (1.5.0): + - RNFlashList (1.6.1): - React-Core - - RNGestureHandler (2.12.0): + - RNGestureHandler (2.13.1): - React-Core - RNQuickAction (0.3.13): - React - - RNReanimated (2.17.0): + - RNReanimated (3.5.4): - DoubleConversion - FBLazyVector - - FBReactNativeSpec - glog + - hermes-engine - RCT-Folly - RCTRequired - RCTTypeSafety @@ -524,11 +585,13 @@ PODS: - React-Core/RCTWebSocket - React-CoreModules - React-cxxreact + - React-hermes - React-jsi - React-jsiexecutor - React-jsinspector - React-RCTActionSheet - React-RCTAnimation + - React-RCTAppDelegate - React-RCTBlob - React-RCTImage - React-RCTLinking @@ -537,19 +600,22 @@ PODS: - React-RCTText - ReactCommon/turbomodule/core - Yoga - - RNScreens (3.23.0): + - RNScreens (3.25.0): - React-Core - React-RCTImage - - RNSentry (4.15.2): + - RNSentry (5.5.0): - React-Core - - Sentry/HybridSDK (= 7.31.5) - - RNSVG (13.10.0): + - Sentry/HybridSDK (= 8.7.1) + - RNSVG (13.14.0): - React-Core - - Sentry/HybridSDK (7.31.5) + - Sentry/HybridSDK (8.7.1): + - SentryPrivate (= 8.7.1) + - SentryPrivate (8.7.1) + - SocketRocket (0.6.1) - Yoga (1.14.0) DEPENDENCIES: - - "amplitude-react-native (from `../node_modules/@amplitude/react-native`)" + - "amplitude-react-native (from `../node_modules/@amplitude/analytics-react-native`)" - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - EASClient (from `../node_modules/expo-eas-client/ios`) @@ -575,10 +641,10 @@ DEPENDENCIES: - ExpoLocalization (from `../node_modules/expo-localization/ios`) - ExpoMailComposer (from `../node_modules/expo-mail-composer/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - ExpoScreenOrientation (from `../node_modules/expo-screen-orientation/ios`) + - ExpoSharing (from `../node_modules/expo-sharing/ios`) - ExpoStoreReview (from `../node_modules/expo-store-review/ios`) - ExpoSystemUI (from `../node_modules/expo-system-ui/ios`) - - EXScreenOrientation (from `../node_modules/expo-screen-orientation/ios`) - - EXSharing (from `../node_modules/expo-sharing/ios`) - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`) - EXStructuredHeaders (from `../node_modules/expo-structured-headers/ios`) - EXUpdates (from `../node_modules/expo-updates/ios`) @@ -598,6 +664,7 @@ DEPENDENCIES: - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) @@ -607,6 +674,7 @@ DEPENDENCIES: - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - "react-native-segmented-control (from `../node_modules/@react-native-segmented-control/segmented-control`)" - react-native-view-shot (from `../node_modules/react-native-view-shot`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) @@ -618,10 +686,13 @@ DEPENDENCIES: - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - "ReactNativeWidgetKit (from `../node_modules/@calitb/react-native-widgetkit/ios`)" - - RNDeviceInfo (from `../node_modules/react-native-device-info`) + - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - "RNFlashList (from `../node_modules/@shopify/flash-list`)" - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNQuickAction (from `../node_modules/react-native-quick-actions`) @@ -633,16 +704,17 @@ DEPENDENCIES: SPEC REPOS: trunk: - - Amplitude - - AnalyticsConnector - ASN1Decoder - fmt - libevent + - ReachabilitySwift - Sentry + - SentryPrivate + - SocketRocket EXTERNAL SOURCES: amplitude-react-native: - :path: "../node_modules/@amplitude/react-native" + :path: "../node_modules/@amplitude/analytics-react-native" boost: :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" DoubleConversion: @@ -693,14 +765,14 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-mail-composer/ios" ExpoModulesCore: :path: "../node_modules/expo-modules-core" + ExpoScreenOrientation: + :path: "../node_modules/expo-screen-orientation/ios" + ExpoSharing: + :path: "../node_modules/expo-sharing/ios" ExpoStoreReview: :path: "../node_modules/expo-store-review/ios" ExpoSystemUI: :path: "../node_modules/expo-system-ui/ios" - EXScreenOrientation: - :path: "../node_modules/expo-screen-orientation/ios" - EXSharing: - :path: "../node_modules/expo-sharing/ios" EXSplashScreen: :path: "../node_modules/expo-splash-screen/ios" EXStructuredHeaders: @@ -717,6 +789,7 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2023-08-07-RNv0.72.4-813b2def12bc9df02654b3e3653ae4a68d0572e0 RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -735,6 +808,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" React-hermes: :path: "../node_modules/react-native/ReactCommon/hermes" React-jsi: @@ -753,6 +828,8 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-segmented-control/segmented-control" react-native-view-shot: :path: "../node_modules/react-native-view-shot" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" React-perflogger: :path: "../node_modules/react-native/ReactCommon/reactperflogger" React-RCTActionSheet: @@ -775,14 +852,20 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Text" React-RCTVibration: :path: "../node_modules/react-native/Libraries/Vibration" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" React-runtimeexecutor: :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" ReactCommon: :path: "../node_modules/react-native/ReactCommon" ReactNativeWidgetKit: :path: "../node_modules/@calitb/react-native-widgetkit/ios" - RNDeviceInfo: - :path: "../node_modules/react-native-device-info" + RNCAsyncStorage: + :path: "../node_modules/@react-native-async-storage/async-storage" RNFlashList: :path: "../node_modules/@shopify/flash-list" RNGestureHandler: @@ -801,92 +884,98 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - Amplitude: 10f20d4436fdcd38ddd5be1da7033fcc21f4143e - amplitude-react-native: 6e5b9e38c53e11a86f62f874a42cf176e2b82c86 - AnalyticsConnector: eccd7e1cd3dd18e6bd09ac2506e37d4ed43ba3f4 + amplitude-react-native: 5b57b8384579b538824965ae4cc7978c8c86ab67 ASN1Decoder: 6110fdeacfdb41559b1481457a1645be716610aa boost: 57d2868c099736d80fcd648bf211b4431e51a558 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 - EASClient: 950674e1098ebc09c4c2cf064a61e42e84d9d4c6 - EXApplication: d8f53a7eee90a870a75656280e8d4b85726ea903 - EXConstants: f348da07e21b23d2b085e270d7b74f282df1a7d9 - EXFileSystem: 844e86ca9b5375486ecc4ef06d3838d5597d895d - EXFont: 6ea3800df746be7233208d80fe379b8ed74f4272 - EXImageLoader: fd053169a8ee932dd83bf1fe5487a50c26d27c2b - EXJSONUtils: 48b1e764ac35160e6f54d21ab60d7d9501f3e473 - EXManifests: 500666d48e8dd7ca5a482c9e729e4a7a6c34081b - EXNotifications: dd628737af60fc8cc62dccebacd326b0fbbc0dcb - Expo: b7d2843b0a0027d0ce76121a63085764355a16ed - expo-dev-client: 92b9e487ad6a05a3ad1dda70334729ccaf622bfe - expo-dev-launcher: 5275974e9f825f70a33bb79301a8ab894179fa94 - expo-dev-menu: f2ea9233cdd8790c20d559eba7352bbf83662d6a - expo-dev-menu-interface: 6c82ae323c4b8724dead4763ce3ff24a2108bdb1 - ExpoBlur: 545dd91ddcf7f51207d6011a6c4d27db9c9ab95a - ExpoClipboard: 9b87df0ad145e3aa841614fab6aea54b7a604850 - ExpoDevice: e0bebf68f978b3d353377ce42e73c20c0a070215 - ExpoHaptics: 5156bc5160d8e04c170dd6e645a71154951a2ad9 - ExpoImageManipulator: 85ab87e9641b9d83108f8d603e0418c12fc19e2d - ExpoKeepAwake: 69f5f627670d62318410392d03e0b5db0f85759a - ExpoLocalization: f26cd431ad9ea3533c5b08c4fabd879176a794bb - ExpoMailComposer: 0085b258d00ba40664f7acb40d96042b29a1da7d - ExpoModulesCore: 653958063a301098b541ae4dfed1ac0b98db607b - ExpoStoreReview: d057dcca4b9c95f3c9db11bd2e168dab9cba59f3 - ExpoSystemUI: 0be5173ee2a7c01e9abc44f56d879a1eaaa16527 - EXScreenOrientation: 52220f8f2477ed25a37e3b2cdbbaa8635d250256 - EXSharing: 09839ace249f61bfa13c50c6a28256c31d260355 - EXSplashScreen: 0e0a9ba0cf7553094e93213099bd7b42e6e237e9 - EXStructuredHeaders: f3a6d417d5d12ef369fd1a31320d1c188a1b0f4b - EXUpdates: 603c4dfec2ed9ef323dfbd9c59c946593d4d9a5c - EXUpdatesInterface: e86394c0770f14eb96386cbb32be83fa6a97e8f9 - FBLazyVector: f637f31eacba90d4fdeff3fa41608b8f361c173b - FBReactNativeSpec: 0d9a4f4de7ab614c49e98c00aedfd3bfbda33d59 + EASClient: 49f8ea858204eb4844d9fb386e5fb7920aee2e30 + EXApplication: 042aa2e3f05258a16962ea1a9914bf288db9c9a1 + EXConstants: ce5bbea779da8031ac818c36bea41b10e14d04e1 + EXFileSystem: 2b826a3bf1071a4b80a8457e97124783d1ac860e + EXFont: 738c44c390953ebcbab075a4848bfbef025fd9ee + EXImageLoader: 34b214f9387e98f3c73989f15d8d5b399c9ab3f7 + EXJSONUtils: 6802be4282d42b97c51682468ddc1026a06f8276 + EXManifests: cf66451b11b2c2f6464917528d792759f7fd6ce0 + EXNotifications: 09394cbd7165f9a4a00a53328aa09bf874bae717 + Expo: e7d2116b947e2e6fdeb09ee4f2754f819426d1b6 + expo-dev-client: a97a68508a6104ad99f4b2613fd808cda7a4186c + expo-dev-launcher: 7336e6dc8ed51b87225f8a96d787add81a99748c + expo-dev-menu: 9542570483a647626570cb4333c80add4cea1254 + expo-dev-menu-interface: bda969497e73dadc2663c479e0fa726ca79a306e + ExpoBlur: a2c90bdfa4ff9f459cdb0f83191bddf020e3e2db + ExpoClipboard: 695f274f8e028cd113837f917da40c76850877eb + ExpoDevice: 1c1b0c9cad96c292c1de73948649cfd654b2b3c0 + ExpoHaptics: 360af6898407ee4e8265d30a1a8fb16491a660eb + ExpoImageManipulator: 851be0965dd9f78019771b140282f1816dcc25ea + ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d + ExpoLocalization: be37fdd0b5930c6a49cd307b4542f4b426d6134c + ExpoMailComposer: feaebd62095efad901ede864b95406f02bf61681 + ExpoModulesCore: 51cb2e7ab4c8da14be3f40b66d54c1781002e99d + ExpoScreenOrientation: 5d109570b17835fe0cfb822268a8ff087c2112ad + ExpoSharing: 825b2b3fc919a2656f75def0069f584bbd6e359a + ExpoStoreReview: f154c9fdf3dbd877ca0115757f0b2b6f43dd9db4 + ExpoSystemUI: fa4854e3226e87f86d3383570264c6e4e90bc782 + EXSplashScreen: c0e7f2d4a640f3b875808ed0b88575538daf6d82 + EXStructuredHeaders: 324cc3130571d2696357fafd8be7fd9a0b5fdf6e + EXUpdates: 7ec199e551666daa808914cda07566a9661f6985 + EXUpdatesInterface: 82ed48d417cdcd376c12ca1c2ce390d35500bed6 + FBLazyVector: 71803c074f6325f10b5ec891c443b6bbabef0ca7 + FBReactNativeSpec: 448e08a759d29a96e15725ae532445bf4343567c fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b - hermes-engine: 47986d26692ae75ee7a17ab049caee8864f855de + hermes-engine: f6cf92a471053245614d9d8097736f6337d5b86c libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 - RCTRequired: 8af6a32dfc2b65ec82193c2dee6e1011ff22ac2a - RCTTypeSafety: bee9dd161c175896c680d47ef1d9eaacf2b587f4 - React: d850475db9ba8006a8b875d79e1e0d6ac8a0f8b6 - React-callinvoker: 6a0c75475ddc17c9ed54e4ff0478074a18fd7ab5 - React-Codegen: 786571642e87add634e7f4d299c85314ec6cc158 - React-Core: 1adfab153f59e4f56e09b97a153089f466d7b8aa - React-CoreModules: 958d236715415d4ccdd5fa35c516cf0356637393 - React-cxxreact: 2e7a6283807ce8755c3d501735acd400bec3b5cd - React-hermes: 8102c3112ba32207c3052619be8cfae14bf99d84 - React-jsi: dd29264f041a587e91f994e4be97e86c127742b2 - React-jsiexecutor: 747911ab5921641b4ed7e4900065896597142125 - React-jsinspector: c712f9e3bb9ba4122d6b82b4f906448b8a281580 - React-logger: 342f358b8decfbf8f272367f4eacf4b6154061be + RCTRequired: df81ab637d35fac9e6eb94611cfd20f0feb05455 + RCTTypeSafety: 4636e4a36c7c2df332bda6d59b19b41c443d4287 + ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 + React: e0cc5197a804031a6c53fb38483c3485fcb9d6f3 + React-callinvoker: 1a635856fe0c3d8b13fccd4ed7e76283b99b0868 + React-Codegen: 78d61f981cccc68a771a598f71621cb7db14b04c + React-Core: 252f8e9ca5a4e91af9b9be58670846d662b1c49f + React-CoreModules: f8b9e91fac7bd5d18729ce961a4978c70b5031cc + React-cxxreact: 70284b32dcd367439d7dae84d9f72660544181b5 + React-debug: ee33d7ba43766d9b10b32561527b57ccfbcb6bd1 + React-hermes: 91f97ea2669dc5847e1f26c243aaad913319c570 + React-jsi: bd68b7779746014f01ea72d1b738809e132d7f1e + React-jsiexecutor: ff70a72027dea5cc7d71cfcc6fad7f599f63987a + React-jsinspector: aef73cbd43b70675f572214d10fa438c89bf11ba + React-logger: 2e4aee3e11b3ec4fa6cfd8004610bbb3b8d6cca4 react-native-animateable-text: 5f5a6e96f6c075aa943ce52ea7fd3fbb3e56d725 - react-native-safe-area-context: 9697629f7b2cda43cf52169bb7e0767d330648c2 + react-native-safe-area-context: 7aa8e6d9d0f3100a820efb1a98af68aa747f9284 react-native-segmented-control: 2221962f5073e2e809aa3691e8e410fc10b60578 react-native-view-shot: f5507655f122e6b104888a11130f267a427f0d57 - React-perflogger: d21f182895de9d1b077f8a3cd00011095c8c9100 - React-RCTActionSheet: 0151f83ef92d2a7139bba7dfdbc8066632a6d47b - React-RCTAnimation: 5ec9c0705bb2297549c120fe6473aa3e4a01e215 - React-RCTAppDelegate: 9895fd1b6d1176d88c4b10ddc169b2e1300c91f0 - React-RCTBlob: f3634eb45b6e7480037655e1ca93d1136ac984dd - React-RCTImage: 3c12cb32dec49549ae62ed6cba4018db43841ffc - React-RCTLinking: 310e930ee335ef25481b4a173d9edb64b77895f9 - React-RCTNetwork: b6837841fe88303b0c04c1e3c01992b30f1f5498 - React-RCTSettings: 600d91fe25fa7c16b0ff891304082440f2904b89 - React-RCTText: a0a19f749088280c6def5397ed6211b811e7eef3 - React-RCTVibration: 43ffd976a25f6057a7cf95ea3648ba4e00287f89 - React-runtimeexecutor: 7c51ae9d4b3e9608a2366e39ccaa606aa551b9ed - ReactCommon: 85c98ab0a509e70bf5ee5d9715cf68dbf495b84c + React-NativeModulesApple: 797bc6078d566eef3fb3f74127e6e1d2e945a15f + React-perflogger: cd8886513f68e1c135a1e79d20575c6489641597 + React-RCTActionSheet: 726d2615ca62a77ce3e2c13d87f65379cdc73498 + React-RCTAnimation: 8f2716b881c37c64858e4ecee0f58bfa57ff9afd + React-RCTAppDelegate: d4a213f29e81682f6b9c7d22f62a2ccab6d125ae + React-RCTBlob: dfaa933231c3497915bbcc9d98fcff7b6b60582c + React-RCTImage: 747e3d7b656a67470f9c234baedb8d41bbc4e745 + React-RCTLinking: 148332b5b0396b280b05534f7d168e560a3bbd5f + React-RCTNetwork: 1d818121a8e678f064de663a6db7aaefc099e53c + React-RCTSettings: 4b95d26ebc88bfd3b6535b2d7904914ff88dbfc2 + React-RCTText: ce4499e4f2d8f85dc4b93ff0559313a016c4f3e2 + React-RCTVibration: 45372e61b35e96d16893540958d156675afbeb63 + React-rncore: a79d1cb3d6c01b358a8aa0b31ccc04ab5f0dbebc + React-runtimeexecutor: 7e31e2bc6d0ecc83d4ba05eadc98401007abc10c + React-runtimescheduler: cc32add98c45c5df18436a6a52a7e1f6edec102c + React-utils: 7a9918a1ffdd39aba67835d42386f592ea3f8e76 + ReactCommon: 91ece8350ebb3dd2be9cef662abd78b6948233c0 ReactNativeWidgetKit: d356de3387427cb3e92e556408460abfb3a207ed - RNDeviceInfo: 5795b418ed3451ebcaf39384e6cf51f60cb931c9 - RNFlashList: 25b0e092b4470c84db0386d4f5316dc34123bb6d - RNGestureHandler: dec4645026e7401a0899f2846d864403478ff6a5 + RNCAsyncStorage: c913ede1fa163a71cea118ed4670bbaaa4b511bb + RNFlashList: 236646d48f224a034f35baa0242e1b77db063b1e + RNGestureHandler: 38aa38413896620338948fbb5c90579a7b1c3fde RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93 - RNReanimated: f186e85d9f28c9383d05ca39e11dd194f59093ec - RNScreens: 6a8a3c6b808aa48dca1780df7b73ea524f602c63 - RNSentry: 4ea90ea061624364637e8077d965bf2e50478066 - RNSVG: 80584470ff1ffc7994923ea135a3e5ad825546b9 - Sentry: 4c9babff9034785067c896fd580b1f7de44da020 - Yoga: 065f0b74dba4832d6e328238de46eb72c5de9556 + RNReanimated: ab2e96c6d5591c3dfbb38a464f54c8d17fb34a87 + RNScreens: 85d3880b52d34db7b8eeebe2f1a0e807c05e69fa + RNSentry: 4fb2cd7d2d6cb94423c24884488206ef881da136 + RNSVG: d00c8f91c3cbf6d476451313a18f04d220d4f396 + Sentry: 11776f6a25a128808d793d0d41bb7ad873b5ae4f + SentryPrivate: b3c448eacdabe9eab7679a2e0af609c608f91572 + SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 + Yoga: 86fed2e4d425ee4c6eab3813ba1791101ee153c6 -PODFILE CHECKSUM: 5f1d4a06a685e0f33185dd8b5422bdc89efbb9bb +PODFILE CHECKSUM: fe601e112cf436f921e0350582fae764fe5b584c -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.1 diff --git a/packages/client/ios/Podfile.properties.json b/packages/client/ios/Podfile.properties.json index b1bd45d..de9f7b7 100644 --- a/packages/client/ios/Podfile.properties.json +++ b/packages/client/ios/Podfile.properties.json @@ -1,3 +1,4 @@ { - "expo.jsEngine": "hermes" + "expo.jsEngine": "hermes", + "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true" } diff --git a/packages/client/ios/RateWidgets/Base.lproj/RateWidgets.intentdefinition b/packages/client/ios/RateWidgets/Base.lproj/RateWidgets.intentdefinition index cde0ab7..2b7396b 100644 --- a/packages/client/ios/RateWidgets/Base.lproj/RateWidgets.intentdefinition +++ b/packages/client/ios/RateWidgets/Base.lproj/RateWidgets.intentdefinition @@ -8,7 +8,7 @@ INEnumDisplayName Value Type INEnumDisplayNameID - oEufjL + uhpYzW INEnumGeneratesHeader INEnumName @@ -21,7 +21,7 @@ INEnumValueDisplayName unknown INEnumValueDisplayNameID - nXavPS + NJdBrE INEnumValueName unknown @@ -29,7 +29,7 @@ INEnumValueDisplayName Compra INEnumValueDisplayNameID - pfnzhV + HlAW7E INEnumValueIndex 1 INEnumValueName @@ -39,7 +39,7 @@ INEnumValueDisplayName Promedio INEnumValueDisplayNameID - g8v3kF + RVyQ6W INEnumValueIndex 2 INEnumValueName @@ -49,7 +49,7 @@ INEnumValueDisplayName Venta INEnumValueDisplayNameID - 7SfjBD + p2wzTd INEnumValueIndex 3 INEnumValueName @@ -61,7 +61,7 @@ INEnumDisplayName Change Type INEnumDisplayNameID - QLA2l0 + jzlPZ1 INEnumGeneratesHeader INEnumName @@ -74,7 +74,7 @@ INEnumValueDisplayName unknown INEnumValueDisplayNameID - rRY6Y2 + pUXTON INEnumValueName unknown @@ -82,7 +82,7 @@ INEnumValueDisplayName Porcentaje INEnumValueDisplayNameID - bnMW1j + Xl84YZ INEnumValueIndex 1 INEnumValueName @@ -92,7 +92,7 @@ INEnumValueDisplayName Monto INEnumValueDisplayNameID - D7E44H + a9MRpz INEnumValueIndex 2 INEnumValueName @@ -106,11 +106,11 @@ INIntentDefinitionNamespace 88xZPY INIntentDefinitionSystemVersion - 22E261 + 22G74 INIntentDefinitionToolsBuildVersion - 14E222b + 14E300c INIntentDefinitionToolsVersion - 14.3 + 14.3.1 INIntents @@ -125,7 +125,7 @@ INIntentIneligibleForSuggestions INIntentLastParameterTag - 6 + 4 INIntentName SelectRateType INIntentParameters @@ -136,7 +136,7 @@ INIntentParameterDisplayName Cotización INIntentParameterDisplayNameID - 8HNm8u + r4vekZ INIntentParameterDisplayPriority 1 INIntentParameterName @@ -159,6 +159,26 @@ INIntentParameterPromptDialogType Primary + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogFormatString + There are ${count} options matching ‘${rateType}’. + INIntentParameterPromptDialogFormatStringID + UH8942 + INIntentParameterPromptDialogType + DisambiguationIntroduction + + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogFormatString + Just to confirm, you wanted ‘${rateType}’? + INIntentParameterPromptDialogFormatStringID + OsOaCJ + INIntentParameterPromptDialogType + Confirmation + INIntentParameterSupportsDynamicEnumeration @@ -173,7 +193,7 @@ INIntentParameterDisplayName Mostrar INIntentParameterDisplayNameID - ATwB6u + nYMwvW INIntentParameterDisplayPriority 2 INIntentParameterEnumType @@ -207,7 +227,7 @@ INIntentParameterPromptDialogFormatString There are ${count} options matching ‘${valueType}’. INIntentParameterPromptDialogFormatStringID - lYn6uD + 67KYjr INIntentParameterPromptDialogType DisambiguationIntroduction @@ -217,7 +237,7 @@ INIntentParameterPromptDialogFormatString Just to confirm, you wanted ‘${valueType}’? INIntentParameterPromptDialogFormatStringID - wDOI0z + 5wEMZ9 INIntentParameterPromptDialogType Confirmation @@ -259,13 +279,13 @@ INIntentDescription Seleccionar cotizaciones INIntentDescriptionID - awIy14 + QKKLd7 INIntentEligibleForWidgets INIntentIneligibleForSuggestions INIntentLastParameterTag - 8 + 5 INIntentName SelectRateTypes INIntentParameters @@ -325,9 +345,9 @@ INIntentParameterConfigurable INIntentParameterDisplayName - Cotizaciones + Rate Types INIntentParameterDisplayNameID - mMMBEY + RMvNPo INIntentParameterDisplayPriority 1 INIntentParameterFixedSizeArray @@ -352,6 +372,26 @@ INIntentParameterPromptDialogType Primary + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogFormatString + There are ${count} options matching ‘${rateTypes}’. + INIntentParameterPromptDialogFormatStringID + kkUgcF + INIntentParameterPromptDialogType + DisambiguationIntroduction + + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogFormatString + Just to confirm, you wanted ‘${rateTypes}’? + INIntentParameterPromptDialogFormatStringID + jXfZco + INIntentParameterPromptDialogType + Confirmation + INIntentParameterSupportsDynamicEnumeration @@ -368,7 +408,7 @@ INIntentParameterDisplayName Mostrar INIntentParameterDisplayNameID - 3pxwCJ + zoXmTW INIntentParameterDisplayPriority 2 INIntentParameterEnumType @@ -402,7 +442,7 @@ INIntentParameterPromptDialogFormatString There are ${count} options matching ‘${valueType}’. INIntentParameterPromptDialogFormatStringID - v6zxOy + hp2t3T INIntentParameterPromptDialogType DisambiguationIntroduction @@ -412,13 +452,13 @@ INIntentParameterPromptDialogFormatString Just to confirm, you wanted ‘${valueType}’? INIntentParameterPromptDialogFormatStringID - wcG5ws + PxDzsY INIntentParameterPromptDialogType Confirmation INIntentParameterTag - 6 + 5 INIntentParameterType Integer @@ -442,7 +482,7 @@ INIntentTitle Select Rate Types INIntentTitleID - KJVrGQ + JtpQnj INIntentType Custom INIntentVerb @@ -455,7 +495,7 @@ INTypeDisplayName Rate Type INTypeDisplayNameID - bCcw0O + rxevbT INTypeLastPropertyTag 99 INTypeName diff --git a/packages/client/ios/RateWidgets/RateWidgets.swift b/packages/client/ios/RateWidgets/RateWidgets.swift index 56054c0..6d4e294 100644 --- a/packages/client/ios/RateWidgets/RateWidgets.swift +++ b/packages/client/ios/RateWidgets/RateWidgets.swift @@ -182,7 +182,6 @@ struct RateWidgetEntryView : View { let entry: RateProvider.Entry let fontName = "FiraGO" // https://developer.apple.com/documentation/uikit/uicolor/ui_element_colors - let bgColor = Color(UIColor.systemBackground) let fgColor = Color(UIColor.label) let fgSecondaryColor = Color(UIColor.secondaryLabel) var body: some View { @@ -196,7 +195,6 @@ struct RateWidgetEntryView : View { VStack { Text(rate.name) .font(.custom(fontName, size: 10)) - // .minimumScaleFactor(0.5) .lineLimit(1) Text(rate.price) .font(.custom(fontName, size: 20)) @@ -206,14 +204,11 @@ struct RateWidgetEntryView : View { if rate.plainChange != nil { Text((rate.plainChange)!) .font(.custom(fontName, size: 10)) - // .minimumScaleFactor(0.5) .lineLimit(1) } } .padding(8) } - // .background(bgColor) - .background(.ultraThinMaterial) .widgetURL(getWidgetUrl(id: rate.id)) } else { ZStack { @@ -223,14 +218,9 @@ struct RateWidgetEntryView : View { .font(.custom(fontName, size: 14)) .lineLimit(1) .widgetAccentable() - /* Image(systemName: "xmark.icloud.fill") - .font(.custom(fontName, size: 20)) - .widgetAccentable() */ } .padding(8) } - // .background(bgColor) - .background(.ultraThinMaterial) .widgetURL(getWidgetUrl()) } } @@ -239,64 +229,58 @@ struct RateWidgetEntryView : View { VStack(alignment: .leading) { Text(rate.name) .font(.custom(fontName, size: 20)) - // .fontWeight(.regular) .foregroundColor(fgColor) - // .minimumScaleFactor(0.5) .lineLimit(1) Spacer() if rate.change != nil { Text((rate.change)!) .font(.custom(fontName, size: 14)) - // .fontWeight(.medium) .foregroundColor(rate.changeColor!) - // .minimumScaleFactor(0.5) .lineLimit(1) } Text(rate.price) .font(.custom(fontName, size: 28)) - // .fontWeight(.semibold) .foregroundColor(fgColor) - // .minimumScaleFactor(0.5) .lineLimit(1) Spacer().frame(height: 8) - // (Text("Actualizado ") + Text(entry.date, style: .time)) Text(rate.date) .font(.custom(fontName, size: 10)) - // .fontWeight(.medium) .foregroundColor(fgSecondaryColor) .lineLimit(1) - // .frame(height: 8, alignment: .bottom) } .frame( maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading ) - .padding(16) - .background(bgColor) .widgetURL(getWidgetUrl(id: rate.id)) } else { VStack { Text("Sin cotización disponible") .font(.custom(fontName, size: 14)) - // .fontWeight(.regular) .foregroundColor(fgColor) - // .minimumScaleFactor(0.5) - // .lineLimit(2) .multilineTextAlignment(.center) } .frame( maxWidth: .infinity, maxHeight: .infinity ) - .padding(16) - .background(bgColor) .widgetURL(getWidgetUrl()) } } } } +extension WidgetConfiguration { + func contentMarginsDisabledIfAvailable() -> some WidgetConfiguration { + if #available(iOSApplicationExtension 17.0, *) { + return self.contentMarginsDisabled() + } else { + return self + } + } +} + struct RateWidget: Widget { let kind: String = "RateWidget" private var supportedFamilies: [WidgetFamily] { @@ -310,9 +294,6 @@ struct RateWidget: Widget { .systemSmall, ] } - /* return [ - .systemSmall, - ] */ } var body: some WidgetConfiguration { IntentConfiguration(kind: kind, intent: SelectRateTypeIntent.self, provider: RateProvider()) { entry in @@ -321,6 +302,7 @@ struct RateWidget: Widget { .configurationDisplayName("Cotizaciones") .description("Mantenete al tanto de las cotizaciones durante el transcurso del día.") .supportedFamilies(supportedFamilies) + // .contentMarginsDisabledIfAvailable() } } @@ -351,7 +333,6 @@ struct ListRatesWidgetEntryView : View { let entry: ListRatesProvider.Entry let fontName = "FiraGO" // https://developer.apple.com/documentation/uikit/uicolor/ui_element_colors - let bgColor = Color(UIColor.systemBackground) let fgColor = Color(UIColor.label) let fgSecondaryColor = Color(UIColor.secondaryLabel) var body: some View { @@ -364,32 +345,24 @@ struct ListRatesWidgetEntryView : View { HStack { Text(rate.name) .font(.custom(fontName, size: 14)) - // .fontWeight(.regular) .foregroundColor(fgColor) - // .minimumScaleFactor(0.5) .lineLimit(1) Spacer() Text(rate.price) .font(.custom(fontName, size: 14)) - // .fontWeight(.medium) .foregroundColor(fgColor) .lineLimit(1) - // .frame(height: 8, alignment: .bottom) } HStack { Text(rate.date) .font(.custom(fontName, size: 10)) - // .fontWeight(.regular) .foregroundColor(fgSecondaryColor) - // .minimumScaleFactor(0.5) .lineLimit(1) Spacer() if rate.change != nil { Text(rate.change!) .font(.custom(fontName, size: 10)) - // .fontWeight(.medium) .foregroundColor(rate.changeColor) - // .minimumScaleFactor(0.5) .lineLimit(1) } } @@ -403,25 +376,18 @@ struct ListRatesWidgetEntryView : View { maxHeight: .infinity, alignment: .topLeading ) - .padding(16) - .background(bgColor) .widgetURL(getWidgetUrl()) } else { VStack { Text("Sin cotizaciones disponibles") .font(.custom(fontName, size: 14)) - // .fontWeight(.regular) .foregroundColor(fgColor) - // .minimumScaleFactor(0.5) - // .lineLimit(2) .multilineTextAlignment(.center) } .frame( maxWidth: .infinity, maxHeight: .infinity ) - .padding(16) - .background(bgColor) .widgetURL(getWidgetUrl()) } } @@ -442,6 +408,7 @@ struct ListRatesWidget: Widget { .configurationDisplayName("Lista de cotizaciones") .description("Mantenete al tanto de las cotizaciones durante el transcurso del día.") .supportedFamilies(supportedFamilies) + // .contentMarginsDisabledIfAvailable() } } diff --git a/packages/client/ios/RateWidgets/es-419.lproj/RateWidgets.strings b/packages/client/ios/RateWidgets/es-419.lproj/RateWidgets.strings index 6be94fd..6401a82 100644 --- a/packages/client/ios/RateWidgets/es-419.lproj/RateWidgets.strings +++ b/packages/client/ios/RateWidgets/es-419.lproj/RateWidgets.strings @@ -1,56 +1,64 @@ -"3pxwCJ" = "Mostrar"; +"5wEMZ9-HlAW7E" = "Just to confirm, you wanted ‘Compra’?"; -"7SfjBD" = "Venta"; +"5wEMZ9-RVyQ6W" = "Just to confirm, you wanted ‘Promedio’?"; -"8HNm8u" = "Cotización"; +"5wEMZ9-p2wzTd" = "Just to confirm, you wanted ‘Venta’?"; -"ATwB6u" = "Mostrar"; +"67KYjr-HlAW7E" = "There are ${count} options matching ‘Compra’."; -"D7E44H" = "Monto"; +"67KYjr-RVyQ6W" = "There are ${count} options matching ‘Promedio’."; -"KJVrGQ" = "Select Rate Types"; +"67KYjr-p2wzTd" = "There are ${count} options matching ‘Venta’."; -"QLA2l0" = "Change Type"; +"HlAW7E" = "Compra"; -"awIy14" = "Seleccionar cotizaciones"; +"JtpQnj" = "Select Rate Types"; -"bCcw0O" = "Rate Type"; +"OsOaCJ" = "Just to confirm, you wanted ‘${rateType}’?"; -"bnMW1j" = "Porcentaje"; +"PxDzsY-HlAW7E" = "Just to confirm, you wanted ‘Compra’?"; -"g8v3kF" = "Promedio"; +"PxDzsY-RVyQ6W" = "Just to confirm, you wanted ‘Promedio’?"; -"gpCwrM" = "Select Rate Type"; +"PxDzsY-p2wzTd" = "Just to confirm, you wanted ‘Venta’?"; -"lYn6uD-7SfjBD" = "There are ${count} options matching ‘Venta’."; +"QKKLd7" = "Seleccionar cotizaciones"; -"lYn6uD-g8v3kF" = "There are ${count} options matching ‘Promedio’."; +"RMvNPo" = "Rate Types"; -"lYn6uD-pfnzhV" = "There are ${count} options matching ‘Compra’."; +"RVyQ6W" = "Promedio"; -"mMMBEY" = "Cotizaciones"; +"UH8942" = "There are ${count} options matching ‘${rateType}’."; -"oEufjL" = "Value Type"; +"Xl84YZ" = "Porcentaje"; -"pfnzhV" = "Compra"; +"a9MRpz" = "Monto"; -"tVvJ9c" = "Seleccionar cotización"; +"gpCwrM" = "Select Rate Type"; + +"hp2t3T-HlAW7E" = "There are ${count} options matching ‘Compra’."; -"v6zxOy-7SfjBD" = "There are ${count} options matching ‘Venta’."; +"hp2t3T-RVyQ6W" = "There are ${count} options matching ‘Promedio’."; -"v6zxOy-g8v3kF" = "There are ${count} options matching ‘Promedio’."; +"hp2t3T-p2wzTd" = "There are ${count} options matching ‘Venta’."; -"v6zxOy-pfnzhV" = "There are ${count} options matching ‘Compra’."; +"jXfZco" = "Just to confirm, you wanted ‘${rateTypes}’?"; -"wDOI0z-7SfjBD" = "Just to confirm, you wanted ‘Venta’?"; +"jzlPZ1" = "Change Type"; -"wDOI0z-g8v3kF" = "Just to confirm, you wanted ‘Promedio’?"; +"kkUgcF" = "There are ${count} options matching ‘${rateTypes}’."; -"wDOI0z-pfnzhV" = "Just to confirm, you wanted ‘Compra’?"; +"nYMwvW" = "Mostrar"; -"wcG5ws-7SfjBD" = "Just to confirm, you wanted ‘Venta’?"; +"p2wzTd" = "Venta"; + +"r4vekZ" = "Cotización"; + +"rxevbT" = "Rate Type"; + +"tVvJ9c" = "Seleccionar cotización"; -"wcG5ws-g8v3kF" = "Just to confirm, you wanted ‘Promedio’?"; +"uhpYzW" = "Value Type"; -"wcG5ws-pfnzhV" = "Just to confirm, you wanted ‘Compra’?"; +"zoXmTW" = "Mostrar"; diff --git a/packages/client/ios/mbitoDlar.xcodeproj/project.pbxproj b/packages/client/ios/mbitoDlar.xcodeproj/project.pbxproj index bc35029..48e23ce 100644 --- a/packages/client/ios/mbitoDlar.xcodeproj/project.pbxproj +++ b/packages/client/ios/mbitoDlar.xcodeproj/project.pbxproj @@ -3,60 +3,60 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 311E88742E7940028BD04581 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01B3F524842449AB6C27D8A /* noop-file.swift */; }; 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; 96905EF65AED1B983A6B3ABC /* libPods-mbitoDlar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-mbitoDlar.a */; }; B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; - C2507AD129BAC9CE0018DDCA /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2507AD029BAC9CE0018DDCA /* WidgetKit.framework */; }; - C2507AD329BAC9CE0018DDCA /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2507AD229BAC9CE0018DDCA /* SwiftUI.framework */; }; - C2507AD829BAC9CE0018DDCA /* RateWidgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2507AD729BAC9CE0018DDCA /* RateWidgets.swift */; }; - C2507ADB29BAC9CF0018DDCA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C2507ADA29BAC9CF0018DDCA /* Assets.xcassets */; }; - C2507AE129BAC9CF0018DDCA /* RateWidgetsExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = C2507ACF29BAC9CE0018DDCA /* RateWidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - C2507AE629BACC500018DDCA /* RateWidgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = C2507AE929BACC500018DDCA /* RateWidgets.intentdefinition */; }; - C2507AE729BACC500018DDCA /* RateWidgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = C2507AE929BACC500018DDCA /* RateWidgets.intentdefinition */; }; - C2507AED29BACC9C0018DDCA /* FiraGO-Regular-Minimal.otf in Resources */ = {isa = PBXBuildFile; fileRef = C2507AEC29BACC9C0018DDCA /* FiraGO-Regular-Minimal.otf */; }; - C2507AF429BACCFB0018DDCA /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2507AF329BACCFB0018DDCA /* Intents.framework */; }; - C2507AF729BACCFB0018DDCA /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2507AF629BACCFB0018DDCA /* IntentHandler.swift */; }; - C2507AFB29BACCFB0018DDCA /* RateIntents.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = C2507AF229BACCFB0018DDCA /* RateIntents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - C2507AFF29BACD110018DDCA /* RateWidgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = C2507AE929BACC500018DDCA /* RateWidgets.intentdefinition */; }; - C2507B0229BACD530018DDCA /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2507B0129BACD530018DDCA /* Helper.swift */; }; - C2507B0329BACD530018DDCA /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2507B0129BACD530018DDCA /* Helper.swift */; }; + C21E45B42A7876B700DE33BF /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C21E45B32A7876B700DE33BF /* WidgetKit.framework */; }; + C21E45B62A7876B700DE33BF /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C21E45B52A7876B700DE33BF /* SwiftUI.framework */; }; + C21E45BB2A7876B700DE33BF /* RateWidgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C21E45BA2A7876B700DE33BF /* RateWidgets.swift */; }; + C21E45BE2A7876B900DE33BF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C21E45BD2A7876B900DE33BF /* Assets.xcassets */; }; + C21E45C42A7876B900DE33BF /* RateWidgetsExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = C21E45B22A7876B700DE33BF /* RateWidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + C21E45C92A78791100DE33BF /* RateWidgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = C21E45CC2A78791100DE33BF /* RateWidgets.intentdefinition */; }; + C21E45CA2A78791100DE33BF /* RateWidgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = C21E45CC2A78791100DE33BF /* RateWidgets.intentdefinition */; }; + C21E45D12A7879B200DE33BF /* FiraGO-Regular-Minimal.otf in Resources */ = {isa = PBXBuildFile; fileRef = C21E45D02A7879B200DE33BF /* FiraGO-Regular-Minimal.otf */; }; + C21E45D82A787A2E00DE33BF /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C21E45D72A787A2E00DE33BF /* Intents.framework */; }; + C21E45DB2A787A2E00DE33BF /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C21E45DA2A787A2E00DE33BF /* IntentHandler.swift */; }; + C21E45DF2A787A2E00DE33BF /* RateIntents.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = C21E45D62A787A2E00DE33BF /* RateIntents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + C21E45E32A787A4A00DE33BF /* RateWidgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = C21E45CC2A78791100DE33BF /* RateWidgets.intentdefinition */; }; + C21E45E62A787AB600DE33BF /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C21E45E52A787AB600DE33BF /* Helper.swift */; }; + C21E45E72A787AB600DE33BF /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C21E45E52A787AB600DE33BF /* Helper.swift */; }; + E320CBB8C349412EB326DBC9 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 655084A5E5B94E5AA67AB50A /* noop-file.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - C2507ADF29BAC9CF0018DDCA /* PBXContainerItemProxy */ = { + C21E45C22A7876B900DE33BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; - remoteGlobalIDString = C2507ACE29BAC9CE0018DDCA; + remoteGlobalIDString = C21E45B12A7876B700DE33BF; remoteInfo = RateWidgetsExtension; }; - C2507AF929BACCFB0018DDCA /* PBXContainerItemProxy */ = { + C21E45DD2A787A2E00DE33BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; - remoteGlobalIDString = C2507AF129BACCFB0018DDCA; + remoteGlobalIDString = C21E45D52A787A2E00DE33BF; remoteInfo = RateIntents; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - C2507AE529BAC9CF0018DDCA /* Embed Foundation Extensions */ = { + C21E45C82A7876B900DE33BF /* Embed Foundation Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( - C2507AFB29BACCFB0018DDCA /* RateIntents.appex in Embed Foundation Extensions */, - C2507AE129BAC9CF0018DDCA /* RateWidgetsExtension.appex in Embed Foundation Extensions */, + C21E45DF2A787A2E00DE33BF /* RateIntents.appex in Embed Foundation Extensions */, + C21E45C42A7876B900DE33BF /* RateWidgetsExtension.appex in Embed Foundation Extensions */, ); name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -64,7 +64,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* mbitoDlar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mbitoDlar.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = mbitoDlar/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = mbitoDlar/AppDelegate.mm; sourceTree = ""; }; @@ -72,26 +71,27 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = mbitoDlar/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = mbitoDlar/main.m; sourceTree = ""; }; 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-mbitoDlar.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-mbitoDlar.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 655084A5E5B94E5AA67AB50A /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "mbitoDlar/noop-file.swift"; sourceTree = ""; }; 6C2E3173556A471DD304B334 /* Pods-mbitoDlar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-mbitoDlar.debug.xcconfig"; path = "Target Support Files/Pods-mbitoDlar/Pods-mbitoDlar.debug.xcconfig"; sourceTree = ""; }; 7A4D352CD337FB3A3BF06240 /* Pods-mbitoDlar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-mbitoDlar.release.xcconfig"; path = "Target Support Files/Pods-mbitoDlar/Pods-mbitoDlar.release.xcconfig"; sourceTree = ""; }; AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = mbitoDlar/SplashScreen.storyboard; sourceTree = ""; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; - C2507ACF29BAC9CE0018DDCA /* RateWidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RateWidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - C2507AD029BAC9CE0018DDCA /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; - C2507AD229BAC9CE0018DDCA /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; - C2507AD729BAC9CE0018DDCA /* RateWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RateWidgets.swift; sourceTree = ""; }; - C2507ADA29BAC9CF0018DDCA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - C2507ADC29BAC9CF0018DDCA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C2507AE829BACC500018DDCA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/RateWidgets.intentdefinition; sourceTree = ""; }; - C2507AEC29BACC9C0018DDCA /* FiraGO-Regular-Minimal.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "FiraGO-Regular-Minimal.otf"; path = "../../assets/fonts/FiraGO-Regular-Minimal.otf"; sourceTree = ""; }; - C2507AF229BACCFB0018DDCA /* RateIntents.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RateIntents.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - C2507AF329BACCFB0018DDCA /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; - C2507AF629BACCFB0018DDCA /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = ""; }; - C2507AF829BACCFB0018DDCA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C2507B0129BACD530018DDCA /* Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Helper.swift; sourceTree = ""; }; - C295610D29F894430086D346 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/RateWidgets.strings"; sourceTree = ""; }; + C21E45B22A7876B700DE33BF /* RateWidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RateWidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + C21E45B32A7876B700DE33BF /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + C21E45B52A7876B700DE33BF /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; + C21E45BA2A7876B700DE33BF /* RateWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RateWidgets.swift; sourceTree = ""; }; + C21E45BD2A7876B900DE33BF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + C21E45BF2A7876B900DE33BF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C21E45CD2A78792400DE33BF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/RateWidgets.intentdefinition; sourceTree = ""; }; + C21E45CF2A78793300DE33BF /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/RateWidgets.strings"; sourceTree = ""; }; + C21E45D02A7879B200DE33BF /* FiraGO-Regular-Minimal.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "FiraGO-Regular-Minimal.otf"; path = "../../assets/fonts/FiraGO-Regular-Minimal.otf"; sourceTree = ""; }; + C21E45D62A787A2E00DE33BF /* RateIntents.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RateIntents.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + C21E45D72A787A2E00DE33BF /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; + C21E45DA2A787A2E00DE33BF /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = ""; }; + C21E45DC2A787A2E00DE33BF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C21E45E52A787AB600DE33BF /* Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Helper.swift; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; - F01B3F524842449AB6C27D8A /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "mbitoDlar/noop-file.swift"; sourceTree = ""; }; + F3D86AC280A943AB944FE020 /* mbitoDlar-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "mbitoDlar-Bridging-Header.h"; path = "mbitoDlar/mbitoDlar-Bridging-Header.h"; sourceTree = ""; }; FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-mbitoDlar/ExpoModulesProvider.swift"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -104,20 +104,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C2507ACC29BAC9CE0018DDCA /* Frameworks */ = { + C21E45AF2A7876B700DE33BF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C2507AD329BAC9CE0018DDCA /* SwiftUI.framework in Frameworks */, - C2507AD129BAC9CE0018DDCA /* WidgetKit.framework in Frameworks */, + C21E45B62A7876B700DE33BF /* SwiftUI.framework in Frameworks */, + C21E45B42A7876B700DE33BF /* WidgetKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C2507AEF29BACCFB0018DDCA /* Frameworks */ = { + C21E45D32A787A2E00DE33BF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C2507AF429BACCFB0018DDCA /* Intents.framework in Frameworks */, + C21E45D82A787A2E00DE33BF /* Intents.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -128,14 +128,14 @@ isa = PBXGroup; children = ( BB2F792B24A3F905000567C9 /* Supporting */, - 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.mm */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, 13B07FB71A68108700A75B9A /* main.m */, AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, - F01B3F524842449AB6C27D8A /* noop-file.swift */, + 655084A5E5B94E5AA67AB50A /* noop-file.swift */, + F3D86AC280A943AB944FE020 /* mbitoDlar-Bridging-Header.h */, ); name = mbitoDlar; sourceTree = ""; @@ -145,9 +145,9 @@ children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-mbitoDlar.a */, - C2507AD029BAC9CE0018DDCA /* WidgetKit.framework */, - C2507AD229BAC9CE0018DDCA /* SwiftUI.framework */, - C2507AF329BACCFB0018DDCA /* Intents.framework */, + C21E45B32A7876B700DE33BF /* WidgetKit.framework */, + C21E45B52A7876B700DE33BF /* SwiftUI.framework */, + C21E45D72A787A2E00DE33BF /* Intents.framework */, ); name = Frameworks; sourceTree = ""; @@ -164,8 +164,8 @@ children = ( 13B07FAE1A68108700A75B9A /* mbitoDlar */, 832341AE1AAA6A7D00B99B32 /* Libraries */, - C2507AD429BAC9CE0018DDCA /* RateWidgets */, - C2507AF529BACCFB0018DDCA /* RateIntents */, + C21E45B72A7876B700DE33BF /* RateWidgets */, + C21E45D92A787A2E00DE33BF /* RateIntents */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, D65327D7A22EEC0BE12398D9 /* Pods */, @@ -180,8 +180,8 @@ isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* mbitoDlar.app */, - C2507ACF29BAC9CE0018DDCA /* RateWidgetsExtension.appex */, - C2507AF229BACCFB0018DDCA /* RateIntents.appex */, + C21E45B22A7876B700DE33BF /* RateWidgetsExtension.appex */, + C21E45D62A787A2E00DE33BF /* RateIntents.appex */, ); name = Products; sourceTree = ""; @@ -203,32 +203,32 @@ path = mbitoDlar/Supporting; sourceTree = ""; }; - C2507AD429BAC9CE0018DDCA /* RateWidgets */ = { + C21E45B72A7876B700DE33BF /* RateWidgets */ = { isa = PBXGroup; children = ( - C2507B0029BACD2F0018DDCA /* Utils */, - C2507AEC29BACC9C0018DDCA /* FiraGO-Regular-Minimal.otf */, - C2507AD729BAC9CE0018DDCA /* RateWidgets.swift */, - C2507AE929BACC500018DDCA /* RateWidgets.intentdefinition */, - C2507ADA29BAC9CF0018DDCA /* Assets.xcassets */, - C2507ADC29BAC9CF0018DDCA /* Info.plist */, + C21E45E42A787A5E00DE33BF /* Utils */, + C21E45D02A7879B200DE33BF /* FiraGO-Regular-Minimal.otf */, + C21E45BA2A7876B700DE33BF /* RateWidgets.swift */, + C21E45CC2A78791100DE33BF /* RateWidgets.intentdefinition */, + C21E45BD2A7876B900DE33BF /* Assets.xcassets */, + C21E45BF2A7876B900DE33BF /* Info.plist */, ); path = RateWidgets; sourceTree = ""; }; - C2507AF529BACCFB0018DDCA /* RateIntents */ = { + C21E45D92A787A2E00DE33BF /* RateIntents */ = { isa = PBXGroup; children = ( - C2507AF629BACCFB0018DDCA /* IntentHandler.swift */, - C2507AF829BACCFB0018DDCA /* Info.plist */, + C21E45DA2A787A2E00DE33BF /* IntentHandler.swift */, + C21E45DC2A787A2E00DE33BF /* Info.plist */, ); path = RateIntents; sourceTree = ""; }; - C2507B0029BACD2F0018DDCA /* Utils */ = { + C21E45E42A787A5E00DE33BF /* Utils */ = { isa = PBXGroup; children = ( - C2507B0129BACD530018DDCA /* Helper.swift */, + C21E45E52A787AB600DE33BF /* Helper.swift */, ); path = Utils; sourceTree = ""; @@ -259,33 +259,34 @@ buildPhases = ( 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, + 798AF1F26130F647FE86F0F1 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, - 8067CBB883904445BF62D5CF /* Upload Debug Symbols to Sentry */, - 76E18F0776DAC6B0B05C38E3 /* [CP] Embed Pods Frameworks */, - C2507AE529BAC9CF0018DDCA /* Embed Foundation Extensions */, + 1B5255A79C7F4BECA8ACB523 /* Upload Debug Symbols to Sentry */, + 0601AEB62AE000833B03E9AD /* [CP] Embed Pods Frameworks */, + C21E45C82A7876B900DE33BF /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( - C2507AE029BAC9CF0018DDCA /* PBXTargetDependency */, - C2507AFA29BACCFB0018DDCA /* PBXTargetDependency */, + C21E45C32A7876B900DE33BF /* PBXTargetDependency */, + C21E45DE2A787A2E00DE33BF /* PBXTargetDependency */, ); name = mbitoDlar; productName = mbitoDlar; productReference = 13B07F961A680F5B00A75B9A /* mbitoDlar.app */; productType = "com.apple.product-type.application"; }; - C2507ACE29BAC9CE0018DDCA /* RateWidgetsExtension */ = { + C21E45B12A7876B700DE33BF /* RateWidgetsExtension */ = { isa = PBXNativeTarget; - buildConfigurationList = C2507AE229BAC9CF0018DDCA /* Build configuration list for PBXNativeTarget "RateWidgetsExtension" */; + buildConfigurationList = C21E45C52A7876B900DE33BF /* Build configuration list for PBXNativeTarget "RateWidgetsExtension" */; buildPhases = ( - C2507ACB29BAC9CE0018DDCA /* Sources */, - C2507ACC29BAC9CE0018DDCA /* Frameworks */, - C2507ACD29BAC9CE0018DDCA /* Resources */, + C21E45AE2A7876B700DE33BF /* Sources */, + C21E45AF2A7876B700DE33BF /* Frameworks */, + C21E45B02A7876B700DE33BF /* Resources */, ); buildRules = ( ); @@ -293,16 +294,16 @@ ); name = RateWidgetsExtension; productName = RateWidgetsExtension; - productReference = C2507ACF29BAC9CE0018DDCA /* RateWidgetsExtension.appex */; + productReference = C21E45B22A7876B700DE33BF /* RateWidgetsExtension.appex */; productType = "com.apple.product-type.app-extension"; }; - C2507AF129BACCFB0018DDCA /* RateIntents */ = { + C21E45D52A787A2E00DE33BF /* RateIntents */ = { isa = PBXNativeTarget; - buildConfigurationList = C2507AFC29BACCFB0018DDCA /* Build configuration list for PBXNativeTarget "RateIntents" */; + buildConfigurationList = C21E45E02A787A2F00DE33BF /* Build configuration list for PBXNativeTarget "RateIntents" */; buildPhases = ( - C2507AEE29BACCFB0018DDCA /* Sources */, - C2507AEF29BACCFB0018DDCA /* Frameworks */, - C2507AF029BACCFB0018DDCA /* Resources */, + C21E45D22A787A2E00DE33BF /* Sources */, + C21E45D32A787A2E00DE33BF /* Frameworks */, + C21E45D42A787A2E00DE33BF /* Resources */, ); buildRules = ( ); @@ -310,7 +311,7 @@ ); name = RateIntents; productName = RateIntents; - productReference = C2507AF229BACCFB0018DDCA /* RateIntents.appex */; + productReference = C21E45D62A787A2E00DE33BF /* RateIntents.appex */; productType = "com.apple.product-type.app-extension"; }; /* End PBXNativeTarget section */ @@ -319,25 +320,23 @@ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1420; + LastSwiftUpdateCheck = 1430; LastUpgradeCheck = 1130; TargetAttributes = { 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1250; }; - C2507ACE29BAC9CE0018DDCA = { - CreatedOnToolsVersion = 14.2; - ProvisioningStyle = Automatic; + C21E45B12A7876B700DE33BF = { + CreatedOnToolsVersion = 14.3.1; }; - C2507AF129BACCFB0018DDCA = { - CreatedOnToolsVersion = 14.2; - ProvisioningStyle = Automatic; + C21E45D52A787A2E00DE33BF = { + CreatedOnToolsVersion = 14.3.1; }; }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "mbitoDlar" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; + developmentRegion = "es-419"; hasScannedForEncodings = 0; knownRegions = ( en, @@ -350,8 +349,8 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* mbitoDlar */, - C2507ACE29BAC9CE0018DDCA /* RateWidgetsExtension */, - C2507AF129BACCFB0018DDCA /* RateIntents */, + C21E45B12A7876B700DE33BF /* RateWidgetsExtension */, + C21E45D52A787A2E00DE33BF /* RateIntents */, ); }; /* End PBXProject section */ @@ -367,16 +366,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C2507ACD29BAC9CE0018DDCA /* Resources */ = { + C21E45B02A7876B700DE33BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C2507AED29BACC9C0018DDCA /* FiraGO-Regular-Minimal.otf in Resources */, - C2507ADB29BAC9CF0018DDCA /* Assets.xcassets in Resources */, + C21E45D12A7879B200DE33BF /* FiraGO-Regular-Minimal.otf in Resources */, + C21E45BE2A7876B900DE33BF /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C2507AF029BACCFB0018DDCA /* Resources */ = { + C21E45D42A787A2E00DE33BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -398,7 +397,25 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export SENTRY_PROPERTIES=sentry.properties\nexport EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\nif [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" $PROJECT_ROOT ios relative | tail -n 1)\"\nfi\n\n`node --print \"require.resolve('@sentry/cli/package.json').slice(0, -13) + '/bin/sentry-cli'\"` react-native xcode --force-foreground `\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; + shellScript = "export SENTRY_PROPERTIES=sentry.properties\nexport EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\nif [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios relative | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`node --print \"require.resolve('@sentry/cli/package.json').slice(0, -13) + '/bin/sentry-cli'\"` react-native xcode --force-foreground `\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n\n\n`node --print \"require.resolve('@sentry/react-native/package.json').slice(0, -13) + '/scripts/collect-modules.sh'\"`"; + }; + 0601AEB62AE000833B03E9AD /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-mbitoDlar/Pods-mbitoDlar-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-mbitoDlar/Pods-mbitoDlar-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; @@ -422,23 +439,38 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 76E18F0776DAC6B0B05C38E3 /* [CP] Embed Pods Frameworks */ = { + 1B5255A79C7F4BECA8ACB523 /* Upload Debug Symbols to Sentry */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-mbitoDlar/Pods-mbitoDlar-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); - name = "[CP] Embed Pods Frameworks"; + name = "Upload Debug Symbols to Sentry"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-mbitoDlar/Pods-mbitoDlar-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "\nexport SENTRY_PROPERTIES=sentry.properties\n[[ $SENTRY_INCLUDE_NATIVE_SOURCES == \"true\" ]] && INCLUDE_SOURCES_FLAG=\"--include-sources\" || INCLUDE_SOURCES_FLAG=\"\"\n`node --print \"require.resolve('@sentry/cli/package.json').slice(0, -13) + '/bin/sentry-cli'\"` debug-files upload --force-foreground \"$INCLUDE_SOURCES_FLAG\" \"$DWARF_DSYM_FOLDER_PATH\"\n "; + }; + 798AF1F26130F647FE86F0F1 /* [Expo] Configure project */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-mbitoDlar/expo-configure-project.sh\"\n"; }; 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; @@ -447,7 +479,6 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-mbitoDlar/Pods-mbitoDlar-resources.sh", - "${PODS_ROOT}/Amplitude/Sources/Resources/ComodoRsaDomainValidationCA.der", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXUpdates/EXUpdates.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", @@ -456,7 +487,6 @@ ); name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ComodoRsaDomainValidationCA.der", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXUpdates.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", @@ -468,20 +498,6 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-mbitoDlar/Pods-mbitoDlar-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 8067CBB883904445BF62D5CF /* Upload Debug Symbols to Sentry */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Upload Debug Symbols to Sentry"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "export SENTRY_PROPERTIES=sentry.properties\n`node --print \"require.resolve('@sentry/cli/package.json').slice(0, -13) + '/bin/sentry-cli'\"` upload-dsym --force-foreground"; - }; FD10A7F022414F080027D42C /* Start Packager */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -498,7 +514,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\nexport RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > `$NODE_BINARY --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/.packager.env'\"`\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open `$NODE_BINARY --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n"; + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\nexport RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > `$NODE_BINARY --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/.packager.env'\"`\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open `$NODE_BINARY --print \"require('path').dirname(require.resolve('expo/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -510,53 +526,53 @@ files = ( 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, - C2507AE629BACC500018DDCA /* RateWidgets.intentdefinition in Sources */, + C21E45C92A78791100DE33BF /* RateWidgets.intentdefinition in Sources */, B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, - 311E88742E7940028BD04581 /* noop-file.swift in Sources */, + E320CBB8C349412EB326DBC9 /* noop-file.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C2507ACB29BAC9CE0018DDCA /* Sources */ = { + C21E45AE2A7876B700DE33BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C2507AE729BACC500018DDCA /* RateWidgets.intentdefinition in Sources */, - C2507AD829BAC9CE0018DDCA /* RateWidgets.swift in Sources */, - C2507B0229BACD530018DDCA /* Helper.swift in Sources */, + C21E45CA2A78791100DE33BF /* RateWidgets.intentdefinition in Sources */, + C21E45BB2A7876B700DE33BF /* RateWidgets.swift in Sources */, + C21E45E62A787AB600DE33BF /* Helper.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C2507AEE29BACCFB0018DDCA /* Sources */ = { + C21E45D22A787A2E00DE33BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C2507AFF29BACD110018DDCA /* RateWidgets.intentdefinition in Sources */, - C2507AF729BACCFB0018DDCA /* IntentHandler.swift in Sources */, - C2507B0329BACD530018DDCA /* Helper.swift in Sources */, + C21E45E32A787A4A00DE33BF /* RateWidgets.intentdefinition in Sources */, + C21E45DB2A787A2E00DE33BF /* IntentHandler.swift in Sources */, + C21E45E72A787AB600DE33BF /* Helper.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - C2507AE029BAC9CF0018DDCA /* PBXTargetDependency */ = { + C21E45C32A7876B900DE33BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = C2507ACE29BAC9CE0018DDCA /* RateWidgetsExtension */; - targetProxy = C2507ADF29BAC9CF0018DDCA /* PBXContainerItemProxy */; + target = C21E45B12A7876B700DE33BF /* RateWidgetsExtension */; + targetProxy = C21E45C22A7876B900DE33BF /* PBXContainerItemProxy */; }; - C2507AFA29BACCFB0018DDCA /* PBXTargetDependency */ = { + C21E45DE2A787A2E00DE33BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = C2507AF129BACCFB0018DDCA /* RateIntents */; - targetProxy = C2507AF929BACCFB0018DDCA /* PBXContainerItemProxy */; + target = C21E45D52A787A2E00DE33BF /* RateIntents */; + targetProxy = C21E45DD2A787A2E00DE33BF /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - C2507AE929BACC500018DDCA /* RateWidgets.intentdefinition */ = { + C21E45CC2A78791100DE33BF /* RateWidgets.intentdefinition */ = { isa = PBXVariantGroup; children = ( - C2507AE829BACC500018DDCA /* Base */, - C295610D29F894430086D346 /* es-419 */, + C21E45CD2A78792400DE33BF /* Base */, + C21E45CF2A78793300DE33BF /* es-419 */, ); name = RateWidgets.intentdefinition; sourceTree = ""; @@ -580,7 +596,10 @@ ); INFOPLIST_FILE = mbitoDlar/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", @@ -590,6 +609,7 @@ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = im.outa.AmbitoDolar; PRODUCT_NAME = mbitoDlar; + SWIFT_OBJC_BRIDGING_HEADER = "mbitoDlar/mbitoDlar-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -608,7 +628,10 @@ CURRENT_PROJECT_VERSION = 1; INFOPLIST_FILE = mbitoDlar/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", @@ -618,6 +641,7 @@ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = im.outa.AmbitoDolar; PRODUCT_NAME = mbitoDlar; + SWIFT_OBJC_BRIDGING_HEADER = "mbitoDlar/mbitoDlar-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -664,6 +688,7 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", + _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION, ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -673,10 +698,22 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = "$(inherited)"; + OTHER_CPLUSPLUSFLAGS = "$(inherited)"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-Wl", + "-ld_classic", + " ", + "-Wl -ld_classic ", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; @@ -717,6 +754,10 @@ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION, + ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -724,16 +765,28 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CFLAGS = "$(inherited)"; + OTHER_CPLUSPLUSFLAGS = "$(inherited)"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-Wl", + "-ld_classic", + " ", + "-Wl -ld_classic ", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; - C2507AE329BAC9CF0018DDCA /* Debug */ = { + C21E45C62A7876B900DE33BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -754,7 +807,11 @@ INFOPLIST_KEY_CFBundleDisplayName = RateWidgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -770,7 +827,7 @@ }; name = Debug; }; - C2507AE429BAC9CF0018DDCA /* Release */ = { + C21E45C72A7876B900DE33BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -792,21 +849,26 @@ INFOPLIST_KEY_CFBundleDisplayName = RateWidgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = im.outa.AmbitoDolar.RateWidgets; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; - C2507AFD29BACCFB0018DDCA /* Debug */ = { + C21E45E12A787A2F00DE33BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NONNULL = YES; @@ -825,7 +887,11 @@ INFOPLIST_KEY_CFBundleDisplayName = RateIntents; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -841,7 +907,7 @@ }; name = Debug; }; - C2507AFE29BACCFB0018DDCA /* Release */ = { + C21E45E22A787A2F00DE33BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NONNULL = YES; @@ -861,15 +927,20 @@ INFOPLIST_KEY_CFBundleDisplayName = RateIntents; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = im.outa.AmbitoDolar.RateIntents; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -896,20 +967,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C2507AE229BAC9CF0018DDCA /* Build configuration list for PBXNativeTarget "RateWidgetsExtension" */ = { + C21E45C52A7876B900DE33BF /* Build configuration list for PBXNativeTarget "RateWidgetsExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( - C2507AE329BAC9CF0018DDCA /* Debug */, - C2507AE429BAC9CF0018DDCA /* Release */, + C21E45C62A7876B900DE33BF /* Debug */, + C21E45C72A7876B900DE33BF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C2507AFC29BACCFB0018DDCA /* Build configuration list for PBXNativeTarget "RateIntents" */ = { + C21E45E02A787A2F00DE33BF /* Build configuration list for PBXNativeTarget "RateIntents" */ = { isa = XCConfigurationList; buildConfigurations = ( - C2507AFD29BACCFB0018DDCA /* Debug */, - C2507AFE29BACCFB0018DDCA /* Release */, + C21E45E12A787A2F00DE33BF /* Debug */, + C21E45E22A787A2F00DE33BF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/packages/client/ios/mbitoDlar/AppDelegate.mm b/packages/client/ios/mbitoDlar/AppDelegate.mm index f6f74ca..d362f27 100644 --- a/packages/client/ios/mbitoDlar/AppDelegate.mm +++ b/packages/client/ios/mbitoDlar/AppDelegate.mm @@ -27,22 +27,12 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"]; #else return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; #endif } -/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off. -/// -/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html -/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture). -/// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`. -- (BOOL)concurrentRootEnabled -{ - return true; -} - // Linking API - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options]; diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png similarity index 100% rename from packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png rename to packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png deleted file mode 100644 index 9246fdd..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png deleted file mode 100644 index c6e65e9..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png deleted file mode 100644 index 3707b18..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png deleted file mode 100644 index 47200b0..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png deleted file mode 100644 index 4a8b0fa..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png deleted file mode 100644 index 86a8f93..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png deleted file mode 100644 index c6e65e9..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png deleted file mode 100644 index 92b3533..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png deleted file mode 100644 index ab78fb9..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png deleted file mode 100644 index ab78fb9..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png deleted file mode 100644 index 947cfc7..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png deleted file mode 100644 index e779fec..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png deleted file mode 100644 index e479520..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png deleted file mode 100644 index a5fab57..0000000 Binary files a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png and /dev/null differ diff --git a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/Contents.json b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/Contents.json index f920cb0..90d8d4c 100644 --- a/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/packages/client/ios/mbitoDlar/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,118 +1,10 @@ { "images": [ { - "idiom": "iphone", - "size": "20x20", - "scale": "2x", - "filename": "App-Icon-20x20@2x.png" - }, - { - "idiom": "iphone", - "size": "20x20", - "scale": "3x", - "filename": "App-Icon-20x20@3x.png" - }, - { - "idiom": "iphone", - "size": "29x29", - "scale": "1x", - "filename": "App-Icon-29x29@1x.png" - }, - { - "idiom": "iphone", - "size": "29x29", - "scale": "2x", - "filename": "App-Icon-29x29@2x.png" - }, - { - "idiom": "iphone", - "size": "29x29", - "scale": "3x", - "filename": "App-Icon-29x29@3x.png" - }, - { - "idiom": "iphone", - "size": "40x40", - "scale": "2x", - "filename": "App-Icon-40x40@2x.png" - }, - { - "idiom": "iphone", - "size": "40x40", - "scale": "3x", - "filename": "App-Icon-40x40@3x.png" - }, - { - "idiom": "iphone", - "size": "60x60", - "scale": "2x", - "filename": "App-Icon-60x60@2x.png" - }, - { - "idiom": "iphone", - "size": "60x60", - "scale": "3x", - "filename": "App-Icon-60x60@3x.png" - }, - { - "idiom": "ipad", - "size": "20x20", - "scale": "1x", - "filename": "App-Icon-20x20@1x.png" - }, - { - "idiom": "ipad", - "size": "20x20", - "scale": "2x", - "filename": "App-Icon-20x20@2x.png" - }, - { - "idiom": "ipad", - "size": "29x29", - "scale": "1x", - "filename": "App-Icon-29x29@1x.png" - }, - { - "idiom": "ipad", - "size": "29x29", - "scale": "2x", - "filename": "App-Icon-29x29@2x.png" - }, - { - "idiom": "ipad", - "size": "40x40", - "scale": "1x", - "filename": "App-Icon-40x40@1x.png" - }, - { - "idiom": "ipad", - "size": "40x40", - "scale": "2x", - "filename": "App-Icon-40x40@2x.png" - }, - { - "idiom": "ipad", - "size": "76x76", - "scale": "1x", - "filename": "App-Icon-76x76@1x.png" - }, - { - "idiom": "ipad", - "size": "76x76", - "scale": "2x", - "filename": "App-Icon-76x76@2x.png" - }, - { - "idiom": "ipad", - "size": "83.5x83.5", - "scale": "2x", - "filename": "App-Icon-83.5x83.5@2x.png" - }, - { - "idiom": "ios-marketing", - "size": "1024x1024", - "scale": "1x", - "filename": "ItunesArtwork@2x.png" + "filename": "App-Icon-1024x1024@1x.png", + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" } ], "info": { diff --git a/packages/client/ios/mbitoDlar/Info.plist b/packages/client/ios/mbitoDlar/Info.plist index 4fea727..6e501fc 100644 --- a/packages/client/ios/mbitoDlar/Info.plist +++ b/packages/client/ios/mbitoDlar/Info.plist @@ -19,7 +19,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 6.7.1 + 6.8.0 CFBundleSignature ???? CFBundleURLTypes @@ -39,9 +39,7 @@ CFBundleVersion - 98 - EXDefaultScreenOrientationMask - UIInterfaceOrientationMaskAll + 99 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes @@ -76,8 +74,6 @@ SelectRateTypeIntent SelectRateTypesIntent - RCTRootViewBackgroundColor - 4278190080 UIApplicationShortcutItems diff --git a/packages/client/ios/mbitoDlar/Supporting/Expo.plist b/packages/client/ios/mbitoDlar/Supporting/Expo.plist index c1a8c09..0ed3de9 100644 --- a/packages/client/ios/mbitoDlar/Supporting/Expo.plist +++ b/packages/client/ios/mbitoDlar/Supporting/Expo.plist @@ -8,7 +8,9 @@ EXUpdatesLaunchWaitMs 0 - EXUpdatesSDKVersion - 48.0.0 + EXUpdatesRuntimeVersion + 6.8.0 + EXUpdatesURL + https://u.expo.dev/88dc0a10-eec5-11e8-bdb0-e9d94f6dfa7d \ No newline at end of file diff --git a/packages/client/ios/mbitoDlar/mbitoDlar-Bridging-Header.h b/packages/client/ios/mbitoDlar/mbitoDlar-Bridging-Header.h new file mode 100644 index 0000000..e11d920 --- /dev/null +++ b/packages/client/ios/mbitoDlar/mbitoDlar-Bridging-Header.h @@ -0,0 +1,3 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// diff --git a/packages/client/metro.config.js b/packages/client/metro.config.js index 2455fe0..685f801 100644 --- a/packages/client/metro.config.js +++ b/packages/client/metro.config.js @@ -19,7 +19,9 @@ config.resolver.nodeModulesPaths = [ // 3. Force Metro to resolve (sub)dependencies only from the `nodeModulesPaths` config.resolver.disableHierarchicalLookup = true; -// required by sentry and firebase -// config.resolver.sourceExts.push('cjs'); +config.resolver.sourceExts.push( + // https://github.com/fnando/i18n#im-getting-an-error-like-unable-to-resolve-make-plural-from-node-modulesi18n-jsdistimportpluralizationjs + 'mjs', +); module.exports = config; diff --git a/packages/client/package.json b/packages/client/package.json index 45fbbad..f306a50 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -3,7 +3,7 @@ "main": "index.js", "private": true, "scripts": { - "start": "expo start --dev-client", + "start": "expo start", "android": "expo run:android", "ios": "expo run:ios", "web": "expo start --web", @@ -11,89 +11,103 @@ }, "dependencies": { "@ambito-dolar/core": "^3.4.0", - "@amplitude/react-native": "^2.17.2", + "@amplitude/analytics-react-native": "^1.4.4", "@calitb/react-native-widgetkit": "^0.2.0", - "@config-plugins/react-native-quick-actions": "^5.0.0", + "@config-plugins/react-native-quick-actions": "^6.0.0", "@expo/react-native-action-sheet": "^4.0.1", "@expo/vector-icons": "^13.0.0", + "@react-native-async-storage/async-storage": "1.19.3", "@react-native-community/hooks": "^3.0.0", "@react-native-segmented-control/segmented-control": "2.4.2", - "@react-navigation/bottom-tabs": "^6.5.8", - "@react-navigation/elements": "^1.3.18", - "@react-navigation/native": "^6.1.7", - "@react-navigation/native-stack": "^6.9.13", - "@reduxjs/toolkit": "^1.9.5", - "@sentry/react-native": "4.15.2", - "@shopify/flash-list": "1.5.0", + "@react-navigation/bottom-tabs": "^6.5.9", + "@react-navigation/elements": "^1.3.19", + "@react-navigation/native": "^6.1.8", + "@react-navigation/native-stack": "^6.9.14", + "@reduxjs/toolkit": "^1.9.6", + "@sentry/react-native": "5.5.0", + "@shopify/flash-list": "1.6.1", "d3-array": "^3.2.4", "d3-shape": "^3.2.0", "dotenv": "^16.3.1", - "expo": "~48.0.20", - "expo-application": "~5.1.1", - "expo-asset": "~8.9.2", - "expo-blur": "~12.3.2", - "expo-build-properties": "~0.6.0", - "expo-clipboard": "~4.1.2", - "expo-constants": "~14.2.1", - "expo-dev-client": "~2.2.1", - "expo-device": "~5.2.1", - "expo-file-system": "~15.2.2", - "expo-font": "~11.1.1", - "expo-haptics": "~12.2.1", - "expo-image-manipulator": "~11.1.1", - "expo-linking": "~4.0.1", - "expo-localization": "~14.1.1", - "expo-mail-composer": "~12.1.1", - "expo-notifications": "~0.18.1", - "expo-screen-orientation": "~5.1.1", - "expo-sharing": "~11.2.2", - "expo-splash-screen": "~0.18.2", - "expo-status-bar": "~1.4.4", - "expo-store-review": "~6.2.1", - "expo-system-ui": "~2.2.1", - "expo-updates": "~0.16.4", - "firebase": "^10.1.0", - "i18n-js": "^4.3.0", + "expo": "^49.0.13", + "expo-application": "~5.3.1", + "expo-asset": "~8.10.1", + "expo-blur": "~12.4.1", + "expo-build-properties": "~0.8.3", + "expo-clipboard": "~4.3.1", + "expo-constants": "~14.4.2", + "expo-dev-client": "~2.4.11", + "expo-device": "~5.4.0", + "expo-file-system": "~15.4.4", + "expo-font": "~11.4.0", + "expo-haptics": "~12.4.0", + "expo-image-manipulator": "~11.3.0", + "expo-linking": "~5.0.2", + "expo-localization": "~14.3.0", + "expo-mail-composer": "~12.3.0", + "expo-notifications": "~0.20.1", + "expo-screen-orientation": "~6.0.5", + "expo-sharing": "~11.5.0", + "expo-splash-screen": "~0.20.5", + "expo-status-bar": "~1.6.0", + "expo-store-review": "~6.4.0", + "expo-system-ui": "~2.4.0", + "expo-updates": "~0.18.14", + "firebase": "^10.4.0", + "i18n-js": "^4.3.2", "immutability-helper": "^3.1.1", "lodash": "^4.17.21", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.71.8", + "react-native": "0.72.5", "react-native-animateable-text": "^0.11.0", "react-native-collapsible": "^1.6.1", - "react-native-device-info": "^10.8.0", "react-native-draggable-flatlist": "outaTiME/react-native-draggable-flatlist", - "react-native-gesture-handler": "^2.12.0", + "react-native-gesture-handler": "^2.13.1", "react-native-quick-actions": "^0.3.13", - "react-native-reanimated": "^2.17.0", + "react-native-reanimated": "~3.5.4", "react-native-redash": "^18.1.0", - "react-native-root-toast": "^3.4.1", - "react-native-safe-area-context": "4.7.1", - "react-native-screens": "~3.23.0", + "react-native-root-toast": "^3.5.1", + "react-native-safe-area-context": "4.7.2", + "react-native-screens": "~3.25.0", "react-native-segmented-control-tab": "^4.0.0", - "react-native-svg": "13.10.0", + "react-native-svg": "13.14.0", "react-native-typography": "^1.4.1", "react-native-view-shot": "3.7.0", - "react-native-web": "~0.18.12", - "react-navigation-header-buttons": "^11.0.0", - "react-redux": "^8.1.1", + "react-native-web": "~0.19.9", + "react-navigation-header-buttons": "^11.0.1", + "react-redux": "^8.1.2", "redux-persist": "^6.0.0", "redux-persist-expo-filesystem": "^2.0.0", "redux-persist-transform-filter": "0.0.22", "reselect": "^4.1.8", "semver": "^7.5.4", - "sentry-expo": "~6.2.2", - "styled-components": "^6.0.5", - "swr": "^2.2.0", + "sentry-expo": "~7.0.1", + "styled-components": "^6.0.8", + "swr": "^2.2.4", "victory": "36.6.11", "victory-native": "36.6.11" }, "devDependencies": { - "@babel/core": "^7.22.9", - "@expo/webpack-config": "^18.1.2" + "@babel/core": "^7.23.0", + "@expo/webpack-config": "^19.0.0" }, - "version": "6.7.1", + "version": "6.7.0", "installConfig": { "hoistingLimits": "workspaces" + }, + "expo": { + "install": { + "exclude": [ + "@react-native-async-storage/async-storage", + "@react-native-segmented-control/segmented-control", + "@shopify/flash-list", + "react-native-gesture-handler", + "react-native-reanimated", + "react-native-safe-area-context", + "react-native-screens", + "react-native-svg" + ] + } } } diff --git a/packages/client/screens/AboutScreen.js b/packages/client/screens/AboutScreen.js index 8d454a9..4129892 100644 --- a/packages/client/screens/AboutScreen.js +++ b/packages/client/screens/AboutScreen.js @@ -2,7 +2,7 @@ import { compose } from '@reduxjs/toolkit'; import React from 'react'; import { View, Text, Linking, Platform } from 'react-native'; import { Gesture, GestureDetector } from 'react-native-gesture-handler'; -import { runOnJS } from 'react-native-reanimated'; +// import { runOnJS } from 'react-native-reanimated'; import AnimatedConfettiView from '../components/AnimatedConfettiView'; import AppIconView from '../components/AppIconView'; @@ -56,7 +56,8 @@ const AboutScreen = ({ headerHeight, tabBarheight, navigation }) => { const tap = Gesture.Tap() .numberOfTaps(2) .onStart(() => { - runOnJS(setMakeItRain)(true); + // FIXME: create new confetti component + // runOnJS(setMakeItRain)(true); }); React.useEffect(() => { if (makeItRain) { @@ -74,7 +75,7 @@ const AboutScreen = ({ headerHeight, tabBarheight, navigation }) => { .then((supported) => supported ? Linking.openURL(TWITTER_DEEP_LINK) - : Linking.openURL(TWITTER_WEB_URL) + : Linking.openURL(TWITTER_WEB_URL), ) .catch(console.warn); }, []); @@ -83,7 +84,7 @@ const AboutScreen = ({ headerHeight, tabBarheight, navigation }) => { .then((supported) => supported ? Linking.openURL(TELEGRAM_DEEP_LINK) - : Linking.openURL(TELEGRAM_WEB_URL) + : Linking.openURL(TELEGRAM_WEB_URL), ) .catch(console.warn); }, []); @@ -92,7 +93,7 @@ const AboutScreen = ({ headerHeight, tabBarheight, navigation }) => { .then((supported) => supported ? Linking.openURL(INSTAGRAM_DEEP_LINK) - : Linking.openURL(INSTAGRAM_WEB_URL) + : Linking.openURL(INSTAGRAM_WEB_URL), ) .catch(console.warn); }, []); @@ -101,7 +102,7 @@ const AboutScreen = ({ headerHeight, tabBarheight, navigation }) => { .then((supported) => supported ? Linking.openURL(FACEBOOK_DEEP_LINK) - : Linking.openURL(FACEBOOK_WEB_URL) + : Linking.openURL(FACEBOOK_WEB_URL), ) .catch(console.warn); }, []); @@ -110,7 +111,7 @@ const AboutScreen = ({ headerHeight, tabBarheight, navigation }) => { .then((supported) => supported ? Linking.openURL(REDDIT_DEEP_LINK) - : Linking.openURL(REDDIT_WEB_URL) + : Linking.openURL(REDDIT_WEB_URL), ) .catch(console.warn); }, []); @@ -122,8 +123,8 @@ const AboutScreen = ({ headerHeight, tabBarheight, navigation }) => { : Linking.canOpenURL(MASTODON_DEEP_LINK).then((supported) => supported ? Linking.openURL(MASTODON_DEEP_LINK) - : Linking.openURL(MASTODON_WEB_URL) - ) + : Linking.openURL(MASTODON_WEB_URL), + ), ) .catch(console.warn); }, []); @@ -132,7 +133,7 @@ const AboutScreen = ({ headerHeight, tabBarheight, navigation }) => { .then((supported) => supported ? Linking.openURL(GITHUB_DEEP_LINK) - : Linking.openURL(GITHUB_WEB_URL) + : Linking.openURL(GITHUB_WEB_URL), ) .catch(console.warn); }, []); diff --git a/packages/client/screens/AdvancedNotificationsScreen.js b/packages/client/screens/AdvancedNotificationsScreen.js index 0a1ba65..3dfd904 100644 --- a/packages/client/screens/AdvancedNotificationsScreen.js +++ b/packages/client/screens/AdvancedNotificationsScreen.js @@ -22,7 +22,7 @@ const AdvancedNotificationsScreen = ({ }) => { const dispatch = useDispatch(); const notification_settings = useSelector( - Helper.getNotificationSettingsSelector + Helper.getNotificationSettingsSelector, ); const onValueChange = React.useCallback( (type, value) => { @@ -33,11 +33,11 @@ const AdvancedNotificationsScreen = ({ [type]: value, }, }, - params.type + params.type, ); dispatch(actions.updateNotificationSettings(settings)); }, - [params, notification_settings] + [params, notification_settings], ); const getItemView = React.useCallback( (type) => { @@ -59,7 +59,7 @@ const AdvancedNotificationsScreen = ({ /> ); }, - [params, notification_settings] + [params, notification_settings], ); return ( { const selectedAppearance = useSelector( - (state) => state.application.appearance + (state) => state.application.appearance, ); const dispatch = useDispatch(); return ( @@ -37,8 +37,8 @@ const AppearanceScreen = ({ headerHeight, tabBarheight }) => { onAction={() => { dispatch( actions.changeAppearance( - appearance === 'system' ? null : appearance - ) + appearance === 'system' ? null : appearance, + ), ); }} /> diff --git a/packages/client/screens/ConversionScreen.js b/packages/client/screens/ConversionScreen.js index adf6cdc..1b6c9fd 100644 --- a/packages/client/screens/ConversionScreen.js +++ b/packages/client/screens/ConversionScreen.js @@ -64,7 +64,7 @@ const ConversionScreen = ({ text: Helper.formatFloatingPointNumber(number), }); }, - [numberValue] + [numberValue], ); const onTextInputChangeText = React.useCallback((text) => { inputTextRef.current?.setNativeProps({ @@ -116,14 +116,14 @@ const ConversionScreen = ({ ? numberValue * rate_value : numberValue / rate_value, true, - currencyIndex === 1 + currencyIndex === 1, )} valueStyle={fonts.title} selectable /> ); }, - [rates, typeIndex, theme, currencyIndex, numberValue, fonts] + [rates, typeIndex, theme, currencyIndex, numberValue, fonts], ); useFocusEffect( React.useCallback(() => { @@ -139,11 +139,11 @@ const ConversionScreen = ({ } }); return () => task.cancel(); - }, [navigation, params]) + }, [navigation, params]), ); const shoudStretch = React.useMemo( () => Settings.shoudStretchRates(rateTypes, headerHeight, tabBarheight), - [rateTypes, headerHeight, tabBarheight] + [rateTypes, headerHeight, tabBarheight], ); return ( <> @@ -301,5 +301,5 @@ const ConversionScreen = ({ export default compose( withContainer(), withDividersOverlay, - withRates(true) + withRates(true), )(ConversionScreen); diff --git a/packages/client/screens/CustomizeRatesScreen.js b/packages/client/screens/CustomizeRatesScreen.js index 353f8f4..31ed496 100644 --- a/packages/client/screens/CustomizeRatesScreen.js +++ b/packages/client/screens/CustomizeRatesScreen.js @@ -34,7 +34,7 @@ const CustomizeRatesScreen = ({ excluded_rates, rate_types, }), - shallowEqual + shallowEqual, ); const dispatch = useDispatch(); const rateTypes = React.useMemo( @@ -42,9 +42,9 @@ const CustomizeRatesScreen = ({ _.intersection( // use rates when nullish rate_types rate_types ?? Object.keys(rates), - Object.keys(rates) + Object.keys(rates), ), - [rates, rate_types] + [rates, rate_types], ); const data = React.useMemo( () => @@ -69,7 +69,7 @@ const CustomizeRatesScreen = ({ ); }, })), - [rateTypes, excluded_rates] + [rateTypes, excluded_rates], ); const { onLayout, width: screenWidth } = useLayout(); const dragHitSlop = React.useMemo( @@ -80,7 +80,7 @@ const CustomizeRatesScreen = ({ ), width: Settings.PADDING + Settings.ICON_SIZE + Settings.PADDING, }), - [screenWidth] + [screenWidth], ); return ( <> @@ -156,5 +156,5 @@ const CustomizeRatesScreen = ({ export default compose( withContainer(), withDividersOverlay, - withRates() + withRates(), )(CustomizeRatesScreen); diff --git a/packages/client/screens/MainScreen.js b/packages/client/screens/MainScreen.js index 0b2df73..3795e95 100644 --- a/packages/client/screens/MainScreen.js +++ b/packages/client/screens/MainScreen.js @@ -64,11 +64,11 @@ const MainScreen = ({ dispatch(actions.registerApplicationRateDetail()); navigation.navigate('RateDetail', { type }); }, - [dispatch] + [dispatch], ); const shoudStretch = React.useMemo( () => Settings.shoudStretchRates(rateTypes, headerHeight, tabBarheight), - [rateTypes, headerHeight, tabBarheight] + [rateTypes, headerHeight, tabBarheight], ); const getItemView = React.useCallback( (type) => ( @@ -82,7 +82,7 @@ const MainScreen = ({ }} /> ), - [rates, shoudStretch] + [rates, shoudStretch], ); if (rateTypes.length === 0) { return ( @@ -129,5 +129,5 @@ export default compose( withDividersOverlay, withRates(true), // withScreenshotShareSheet('Compartir cotizaciones') - withScreenshotShareSheet([I18n.t('edit')]) + withScreenshotShareSheet([I18n.t('edit')]), )(MainScreen); diff --git a/packages/client/screens/NotificationsScreen.js b/packages/client/screens/NotificationsScreen.js index 39d2291..be3d063 100644 --- a/packages/client/screens/NotificationsScreen.js +++ b/packages/client/screens/NotificationsScreen.js @@ -27,18 +27,18 @@ const NotificationsScreen = ({ headerHeight, tabBarheight, navigation }) => { const { invertedTheme } = Helper.useTheme(); const dispatch = useDispatch(); const notification_settings = useSelector( - Helper.getNotificationSettingsSelector + Helper.getNotificationSettingsSelector, ); const onValueChange = React.useCallback( (value, type) => { const settings = Helper.getNotificationSettings( notification_settings, value, - type + type, ); dispatch(actions.updateNotificationSettings(settings)); }, - [notification_settings] + [notification_settings], ); const getItemView = React.useCallback( (type) => ( @@ -59,7 +59,7 @@ const NotificationsScreen = ({ headerHeight, tabBarheight, navigation }) => { /> ), - [notification_settings] + [notification_settings], ); const [allowNotifications] = Helper.useSharedState('allowNotifications'); const pushToken = useSelector((state) => state.application.push_token); @@ -150,5 +150,5 @@ const NotificationsScreen = ({ headerHeight, tabBarheight, navigation }) => { export default compose( withContainer(), - withDividersOverlay + withDividersOverlay, )(NotificationsScreen); diff --git a/packages/client/screens/RateDetailScreen.js b/packages/client/screens/RateDetailScreen.js index caa05af..1d368b0 100644 --- a/packages/client/screens/RateDetailScreen.js +++ b/packages/client/screens/RateDetailScreen.js @@ -42,7 +42,7 @@ const RateDetailScreen = ({ navigation, rates, route: { params } }) => { historical_rates, excluded_rates, }), - shallowEqual + shallowEqual, ); const prev_historical_rates = Helper.usePrevious(historical_rates); const updateHistoricalRates = React.useCallback(() => { @@ -85,9 +85,9 @@ const RateDetailScreen = ({ navigation, rates, route: { params } }) => { moment_from, moment_to, 'day', - '[]' - ) - ) + '[]', + ), + ), ); } else { if (__DEV__) { @@ -135,18 +135,18 @@ const RateDetailScreen = ({ navigation, rates, route: { params } }) => { ], { cancelable: false, - } + }, ); }) .finally(() => { setLoading(false); - }) + }), ); } }, [rangeIndex, historical_rates]); const onRawDetail = React.useCallback( () => navigation.navigate('RateRawDetail', { type, rangeIndex }), - [type, rangeIndex] + [type, rangeIndex], ); const onTabPress = React.useCallback((index) => { setRangeIndex(index); @@ -245,5 +245,5 @@ export default compose( withDividersOverlay, withRates(), // withScreenshotShareSheet('Compartir cotización') - withScreenshotShareSheet() + withScreenshotShareSheet(), )(RateDetailScreen); diff --git a/packages/client/screens/RateOrderScreen.js b/packages/client/screens/RateOrderScreen.js index 4c63bf1..0275d42 100644 --- a/packages/client/screens/RateOrderScreen.js +++ b/packages/client/screens/RateOrderScreen.js @@ -19,7 +19,7 @@ const RateOrderScreen = ({ isModal, headerHeight, tabBarheight }) => { rate_order, rate_order_direction, }), - shallowEqual + shallowEqual, ); const dispatch = useDispatch(); return ( @@ -46,7 +46,7 @@ const RateOrderScreen = ({ isModal, headerHeight, tabBarheight }) => { dispatch(actions.changeRateOrder(selection)); }} /> - ) + ), )} diff --git a/packages/client/screens/RateRawDetailScreen.js b/packages/client/screens/RateRawDetailScreen.js index 6c86c2f..f51cbf4 100644 --- a/packages/client/screens/RateRawDetailScreen.js +++ b/packages/client/screens/RateRawDetailScreen.js @@ -78,8 +78,8 @@ const RateRawDetailScreen = ({ moment_from, moment_to, 'day', - '[]' - ) + '[]', + ), ); } else { if (__DEV__) { @@ -93,9 +93,9 @@ const RateRawDetailScreen = ({ () => DateUtils.formatRange( chartStats[0][0], - chartStats[chartStats.length - 1][0] + chartStats[chartStats.length - 1][0], ), - [chartStats] + [chartStats], ); // reverse the order and normalize const data = React.useMemo( @@ -113,7 +113,7 @@ const RateRawDetailScreen = ({ /> ), })), - [chartStats] + [chartStats], ); return ( { updatedAt, appearance, }), - shallowEqual + shallowEqual, ); const onPressContact = React.useCallback(() => { MailComposer.composeAsync({ @@ -59,13 +59,13 @@ const SettingsScreen = ({ headerHeight, tabBarheight, navigation }) => { const [tick, setTick] = React.useState(); const updatedAtFromNow = React.useMemo( () => DateUtils.get(updatedAt).calendar(), - [tick] + [tick], ); const tickCallback = React.useCallback( (tick) => { setTick(tick); }, - [updatedAt] + [updatedAt], ); Helper.useInterval(tickCallback); return ( diff --git a/packages/client/screens/StatisticsScreen.js b/packages/client/screens/StatisticsScreen.js index 386c3e9..1fb3df6 100644 --- a/packages/client/screens/StatisticsScreen.js +++ b/packages/client/screens/StatisticsScreen.js @@ -44,7 +44,7 @@ const StatisticsScreen = ({ headerHeight, tabBarheight }) => { downloadedHistoricalRates, detailedRates, }), - shallowEqual + shallowEqual, ); return ( diff --git a/packages/client/screens/UpdateAppScreen.js b/packages/client/screens/UpdateAppScreen.js index a7097e8..2631de7 100644 --- a/packages/client/screens/UpdateAppScreen.js +++ b/packages/client/screens/UpdateAppScreen.js @@ -28,7 +28,7 @@ const UpdateAppScreen = ({ navigation }) => { console.log('You must confirm the current modal screen'); } }), - [navigation, confirmed] + [navigation, confirmed], ); React.useEffect(() => { if (confirmed === true) { diff --git a/packages/client/store/index.js b/packages/client/store/index.js index cc75a12..89738ba 100644 --- a/packages/client/store/index.js +++ b/packages/client/store/index.js @@ -19,7 +19,7 @@ import rootReducer from '../reducers'; const saveApplicationSubsetBlacklistFilter = createBlacklistFilter( 'application', - ['push_token', 'sending_push_token'] + ['push_token', 'sending_push_token'], ); const STORE_CONFIG_VERSION = 6.1; diff --git a/packages/client/utilities/Amplitude.js b/packages/client/utilities/Amplitude.js index ac52e07..86e5837 100644 --- a/packages/client/utilities/Amplitude.js +++ b/packages/client/utilities/Amplitude.js @@ -1,25 +1,12 @@ -import { Amplitude } from '@amplitude/react-native'; +import { init, setUserId, track } from '@amplitude/analytics-react-native'; import Settings from '../config/settings'; -const init = (key) => { - const instance = Amplitude.getInstance(); - instance.init(key).catch(console.warn); - // extras here - return instance; -}; - -const instance = - Settings.IS_PRODUCTION && +Settings.IS_PRODUCTION && Settings.AMPLITUDE_KEY && init(Settings.AMPLITUDE_KEY); -const setUserId = (id) => - instance && instance.setUserId(id).catch(console.warn); -const logEvent = (type, props) => - instance && instance.logEvent(type, props).catch(console.warn); - export default { setUserId, - logEvent, + track, }; diff --git a/packages/client/utilities/Helper.js b/packages/client/utilities/Helper.js index 82dd395..508e6e5 100644 --- a/packages/client/utilities/Helper.js +++ b/packages/client/utilities/Helper.js @@ -24,7 +24,7 @@ import Settings from '../config/settings'; const getNotificationSettings = (notification_settings, value, type) => { notification_settings = AmbitoDolar.getNotificationSettings( - notification_settings + notification_settings, ); let setting = typeof value === 'boolean' @@ -42,7 +42,7 @@ const getNotificationSettings = (notification_settings, value, type) => { const getNotificationSettingsSelector = createSelector( ({ application }) => application.notification_settings, - (notification_settings) => getNotificationSettings(notification_settings) + (notification_settings) => getNotificationSettings(notification_settings), ); const getJson = (url, opts = {}) => { @@ -304,7 +304,7 @@ export default { excluded_rates, rate_types, }), - shallowEqual + shallowEqual, ); return React.useMemo(() => { const availableRates = this.getAvailableRates(rates); @@ -314,7 +314,7 @@ export default { order, orderDirection, excludedRates, - rateTypes + rateTypes, ); } return availableRates; @@ -376,7 +376,7 @@ export default { const context = React.useContext(ThemeContext); const colorScheme = React.useMemo( () => context?.colorScheme || 'light', - [context] + [context], ); const theme = React.useMemo( () => ({ @@ -399,14 +399,14 @@ export default { // TODO: add fonts with theme here ?? // getFontObject: (name) => Settings.getFontObject(theme, name), }), - [colorScheme] + [colorScheme], ); return theme; }, useInterval: (callback, { leading = true, delay = 60 * 1000 } = {}) => { const handler = React.useCallback( (...args) => callback?.(...args), - [callback] + [callback], ); React.useEffect(() => { if (leading === true) { diff --git a/packages/core/index.js b/packages/core/index.js index b724408..0355841 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -126,7 +126,7 @@ const getNumber = (value, maxDigits = FRACTION_DIGITS) => { const formatNumber = ( num, maxDigits = FRACTION_DIGITS, - forceFractionDigits = true + forceFractionDigits = true, ) => { // truncate to prevent rounding issues num = getNumber(num, maxDigits); @@ -282,7 +282,7 @@ const getNotificationSettings = (notification_settings) => { ...type_defaults, }, }, - notification_settings + notification_settings, ); }; diff --git a/packages/core/test.js b/packages/core/test.js index 21eb3c8..ef1e502 100644 --- a/packages/core/test.js +++ b/packages/core/test.js @@ -9,22 +9,22 @@ test('Dates should use the default timezone', function (t) { t.is( date_tz.format(), // use valueOf to avoid timezone and use local - AmbitoDolar.getDate(date_tz.valueOf()).utcOffset(utc_offset).format() + AmbitoDolar.getDate(date_tz.valueOf()).utcOffset(utc_offset).format(), ); t.is( AmbitoDolar.getTimezoneDate('2021-03-08T12:00:00-03:00').format(), - '2021-03-08T12:00:00-03:00' + '2021-03-08T12:00:00-03:00', ); t.is( AmbitoDolar.getTimezoneDate( '2021-03-08T12:00:00-03:00', undefined, - true + true, ).format(), - '2021-03-08T00:00:00-03:00' + '2021-03-08T00:00:00-03:00', ); const moment_from = AmbitoDolar.getTimezoneDate( - '2020-10-23T16:15:08-03:00' + '2020-10-23T16:15:08-03:00', ).subtract(1, 'year'); const moment_to = AmbitoDolar.getTimezoneDate('2020-10-15T16:25:06-03:00'); const timestamp = '2019-10-23T00:00:00-03:00'; @@ -35,16 +35,16 @@ test('Dates should use the default timezone', function (t) { moment_to, 'day', // moment_to exclusion - '[)' - ) + '[)', + ), ); t.is( AmbitoDolar.getTimezoneDate('2022-05-13T18:00:39-03:00').unix(), - 1652475639 + 1652475639, ); t.is( AmbitoDolar.getTimezoneDate(1652475639 * 1000).format(), - '2022-05-13T18:00:39-03:00' + '2022-05-13T18:00:39-03:00', ); }); diff --git a/packages/website/src/pages/index.js b/packages/website/src/pages/index.js index 3145adc..a0cdbaa 100644 --- a/packages/website/src/pages/index.js +++ b/packages/website/src/pages/index.js @@ -28,7 +28,7 @@ const IndexPage = () => { window.open( 'https://apps.apple.com/app/id1485120819', '_blank', - 'noopener' + 'noopener', ); }); document @@ -37,7 +37,7 @@ const IndexPage = () => { window.open( 'https://play.google.com/store/apps/details?id=im.outa.AmbitoDolar', '_blank', - 'noopener' + 'noopener', ); }); }, []); diff --git a/scriptable-widget.js b/scriptable-widget.js index 9887580..7044db1 100644 --- a/scriptable-widget.js +++ b/scriptable-widget.js @@ -52,13 +52,13 @@ const getRateTitle = (type) => { const FALLBACK_LOCALE = 'es-AR'; const DEVICE_LOCALE = [].concat( Device.preferredLanguages(), - FALLBACK_LOCALE + FALLBACK_LOCALE, )[0]; const formatNumber = ( num, maxDigits = FRACTION_DIGITS, - forceFractionDigits = true + forceFractionDigits = true, ) => { return num.toLocaleString(DEVICE_LOCALE, { ...(forceFractionDigits === true && { diff --git a/sst.config.js b/sst.config.js index 2911983..57ad09c 100644 --- a/sst.config.js +++ b/sst.config.js @@ -40,8 +40,13 @@ export default { TWITTER_APP_SECRET: process.env.TWITTER_APP_SECRET, TWITTER_ACCESS_TOKEN: process.env.TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_SECRET: process.env.TWITTER_ACCESS_SECRET, + BSKY_USERNAME: process.env.BSKY_USERNAME, + BSKY_PASSWORD: process.env.BSKY_PASSWORD, // https://aws.amazon.com/es/blogs/compute/node-js-18-x-runtime-now-available-in-aws-lambda/ - NODE_OPTIONS: '--no-experimental-fetch', + // NODE_OPTIONS: '--no-experimental-fetch', + // prevents experimental warnings from buffer.File + NODE_OPTIONS: '--no-warnings', + // NODE_NO_WARNINGS: 1, }, runtime: 'nodejs18.x', tracing: 'disabled', diff --git a/stacks/MainStack.js b/stacks/MainStack.js index 9f2b00f..bb9cb39 100644 --- a/stacks/MainStack.js +++ b/stacks/MainStack.js @@ -10,22 +10,22 @@ export function MainStack({ stack }) { const bucket = s3.Bucket.fromBucketName( stack, 'Bucket', - process.env.S3_BUCKET + process.env.S3_BUCKET, ); const devicesTable = dynamodb.Table.fromTableName( stack, 'Devices', - process.env.DEVICES_TABLE_NAME + process.env.DEVICES_TABLE_NAME, ); const notificationsTable = dynamodb.Table.fromTableName( stack, 'Notifications', - process.env.NOTIFICATIONS_TABLE_NAME + process.env.NOTIFICATIONS_TABLE_NAME, ); const certificate = Certificate.fromCertificateArn( stack, 'ApiCertificate', - process.env.DOMAIN_CERTIFICATE_ARN + process.env.DOMAIN_CERTIFICATE_ARN, ); // expo web build const screenshotSite = new StaticSite(stack, 'ScreenshotSite', {