{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":56106874,"defaultBranch":"main","name":"GoogleApisForiOSComponents","ownerLogin":"xamarin","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-04-13T00:05:11.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/790012?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1675483213.0591948","currentOid":""},"activityList":{"items":[{"before":"327aa47245d015de2a5e9bf516d07169cd44126b","after":"c7ae591364f73a4e61d47d765a1e537bb509422e","ref":"refs/heads/main","pushedAt":"2023-08-29T13:41:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dalexsoto","name":"Alex Soto","path":"/dalexsoto","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/204671?s=80&v=4"},"commit":{"message":"[Firebase/Database] Don't link with icucore. (#626)\n\nThis avoids a problem where we might accidentally link with private symbols\r\nexported by libicucore.dylib instead of the same symbols provided in a static\r\nlibrary.\r\n\r\nThis would show up as an App Store rejection:\r\n\r\n TMS-90338: Non-public API usage - The app references non-public symbols:\r\n _ubrk_openRules, _ucal_add, _ucal_close, _ucal_get, _ucal_getAttribute,\r\n _ucal_getKeywordValuesForLocale, _ucal_getNow, _ucal_getTimeZoneDisplayName,\r\n _ucal_getTimeZoneIDForWindowsID, _ucal_getWindowsTimeZoneID, _ucal_open,\r\n _ucal_openTimeZoneIDEnumeration, _ucal_set, _ucal_setMillis, _ucol_close,\r\n _ucol_closeElements, _ucol_getOffset, _ucol_getRules, _ucol_getSortKey,\r\n _ucol_getStrength, _ucol_getVersion, _ucol_next, _ucol_open,\r\n _ucol_openElements, _ucol_openRules, _ucol_previous, _ucol_safeClone,\r\n _ucol_setAttribute, _ucol_setVariableTop, _ucol_strcoll, _ucurr_forLocale,\r\n _ucurr_getName, _udat_close, _udat_countSymbols, _udat_format,\r\n _udat_getSymbols, _udat_open, _udat_setCalendar, _udat_toPattern,\r\n _udata_setCommonData, _udatpg_close, _udatpg_getBestPattern, _udatpg_open,\r\n _uenum_close, _uenum_count, _uenum_next, _uldn_close,\r\n _uldn_keyValueDisplayName, _uldn_open, _uloc_canonicalize,\r\n _uloc_countAvailable, _uloc_getAvailable, _uloc_getBaseName,\r\n _uloc_getCharacterOrientation, _uloc_getCountry, _uloc_getDefault,\r\n _uloc_getDisplayCountry, _uloc_getDisplayLanguage, _uloc_getDisplayName,\r\n _uloc_getISO3Country, _uloc_getISO3Language, _uloc_getKeywordValue,\r\n _uloc_getLCID, _uloc_getLanguage, _uloc_getName, _uloc_getParent,\r\n _uloc_setKeywordValue, _ulocdata_getCLDRVersion,\r\n _ulocdata_getMeasurementSystem, _unorm2_getNFDInstance,\r\n _unorm2_getNFKCInstance, _unorm2_getNFKDInstance, _unorm2_isNormalized,\r\n _unum_close, _unum_getAttribute, _unum_getSymbol, _unum_open, _unum_toPattern,\r\n _ures_close, _ures_getByKey, _ures_getSize, _ures_getStringByIndex,\r\n _ures_open, _usearch_close, _usearch_first, _usearch_getBreakIterator,\r\n _usearch_getMatchedLength, _usearch_last, _usearch_openFromCollator,\r\n _usearch_setPattern, _usearch_setText.\r\n\r\nThis is what happens:\r\n\r\n1. Mono uses ICU for various purposes, and we ship the corresponding helper\r\n code as a static library (libicui18n.a).\r\n2. iOS also uses ICU, and does so privately, we have no access to iOS’ copy of\r\n those libraries.\r\n3. FirebaseDatabase links with libicucore.dylib (this is a dylib shipped in\r\n iOS). I’m not exactly sure why FirebaseDatabase does this, but it seems to\r\n be allowed by Apple.\r\n4. libicucore.dylib exports some of the symbols from iOS’ (private) copy of\r\n ICU. I’m assuming this is just an implementation detail on Apple’s side,\r\n and why they’ve added checks to the App Store to reject any apps that\r\n reference these private symbols. When using FirebaseDatabase, we end up\r\n asking the native linker to link with libicucore.dylib (-licucore) due to\r\n the LinkerFlags in the NativeReference item.\r\n5. We already ask the native linker to link with our own static version of ICU\r\n (from step 1) – by passing the path to the static library in question\r\n (libicui18n.a)\r\n6. Depending on which native linker argument comes first (-licucore or\r\n libicui18n.a) the native linker will find the symbols in one place or the\r\n other. If found in Apple’s libicucore.dylib, the app ends up rejected by\r\n the App Store.\r\n\r\nSo avoid all of this by making FirebaseDatabase not link with\r\nlibicucore.dylib.","shortMessageHtmlLink":"[Firebase/Database] Don't link with icucore. (#626)"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAADdOo9uAA","startCursor":null,"endCursor":null}},"title":"Activity · xamarin/GoogleApisForiOSComponents"}