;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Preços de aplicativos para iPhone e iPad vão aumentar no Brasil

s na App Store ou no iTunes acabam escondidas por trás de vários menus - Getty Images
s na App Store ou no iTunes acabam escondidas por trás de vários menus Imagem: Getty Images

Bruna Souza Cruz

De Tilt, em São Paulo

27/10/2020 10h47

Sem tempo, irmão

  • Apple anunciou para desenvolvedores nova tabela de preços para a App Store
  • O Brasil é um dos países escolhidos para sofrer o reajuste
  • Aplicativos pagos para iPhone e iPad devem ficar mais caros
  • África do Sul, Colômbia, Índia, Indonésia e Rússia também estão na lista de novos preços

A Apple anunciou para desenvolvedores ontem (26) que os preços de aplicativos pagos na App Store e as compras realizadas dentro dos apps sofrerão reajuste no Brasil. Segundo a empresa, as justificativas são mudanças na cobrança de impostos ou taxas de câmbio.

Ainda não se sabe quando a alteração começará a ser sentida pelos usuários, mas deve ser em breve. Os aplicativos com s que se renovam automaticamente não sofrerão reajustes, informou a Apple em seu comunicado.

Agora, o valor mais barato cobrado na App Store é de R$ 4,90 (Tier 1, na classificação oficial). Antes, era de R$ 3,90. O valor base que vem na sequência, na categoria Tier 2, fica em R$ 10,90 (no lugar de R$ 7,90).

Confira outros valores:

  • Tier 3 - R$ 16,90
  • Tier 4 - R$ 22,90
  • Tier 5 - R$ 27,90
  • Tier 6 - R$ 34,90
  • Tier 7 - R$ 39,90
  • Tier 8 - R$ 44,90
  • Tier 9 - R$ 49,90
  • Tier 10 - R$ 54,90

O preço base máximo de cobrança dentro da loja de aplicativos será de R$ 5.499 com essa atualização. Os valores alternativos de aplicativos variam agora entre R$ 0,90 e R$ 27,90.

O último aumento realizado pela Apple aconteceu em 2018.

Além do Brasil, os preços na loja de aplicativos da Apple também vão aumentar na África do Sul, Colômbia, Índia, Indonésia, Rússia. Albânia e Islândia também terão acréscimos.

Não há informações sobre acréscimo na cobrança de serviços como iCloud e Apple Music.

iPhones mais caros

Com o lançamento do iPhone 12 no último dia 13 de outubro, a Apple também reajustou o preço de modelos antigos de seu celular no Brasil.

A decisão causou estranheza, já que era costume ter aparelhos antigos com valores menores vendidos em sua loja online logo após o lançamento de uma nova geração de iPhone.

A Apple não deu muitos detalhes sobre o motivo do acréscimo nos preços, mas a alta do dólar pode ser um dos motivos.

O iPhone 11 (2019) e o iPhone XR (2018), foram alguns exemplos:

iPhone 11:

64 GB: R$ 4.999 (antes) e R$ 5.699 (depois)
128 GB: R$ 5.299 (antes) e R$ 6.199 (depois)
256 GB: R$ 5.799 (antes) e R$ 7.199 (depois)

iPhone XR:

64 GB: R$ 4.299 (antes) e R$ 4.999 (depois)
128 GB: R$ 4.599 (antes) e R$ 5.299 (depois)

iPhone SE:

128 GB: R$ 3.999 (antes) e R$ 4.199 (depois)
256 GB: R$ 4.499 (antes) e R$ 5.199 (depois)

Os iPhones 11 Pro e 11 Pro Max foram substituidos pela Apple pela nova família iPhone 12 Pro e iPhone 12 Pro Max.