Piszemy aplikację Tyflopodcastu dla systemu iOS! Vol. 1

A, dawno nic nie programowaliśmy razem a, jako że tak czy tak mam do zrobienia żeczony projekt, postanowiłem, że w tym wpisie, albo serii wpisów (to zależy od długości tego artykułu) poprowadzę Was przez proces pisania nowej aplikacji od zera.

Zanim zaczniemy bazgrolić.

Programowanie to nie tylko pisanie kodu, ale też design interfejsu, testowanie, poprawne nazywanie opcji, wymyślanie układów kart, kupienie sobie normalnej klawiatury, czy inne takie mało ciekawe rzeczy. Cały proces wypadałoby zacząć od podstawowych założeń, czyli na przykład „Co aplikacja ma robić?”

Aplikacja Tyflocentrum ma za zadanie:

  • Wyświetlać katalog wszystkich audycji z serwisu Tyflopodcast
    • Pozwalać użytkownikowi na filtrowanie audycji wedłóg ustalonych kategorii
  • Pozwalać użytkownikowi na przeszukiwanie zasobów serwisu wedłóg słów kluczowych
  • Pozwalać użytkownikowi pobierać audycje na urządzenie, a także zapisywać je w swojej bibliotece
  • Pozwalać użytkownikowi na przeglądanie zasobów serwisu Tyflo Świat

Jak na razie to byłoby na tyle. Jeżeli uda się zrealizować te założenia, to wówczas będzie można myśleć o powolnym rozbudowywaniu aplikacji o nowe funkcje.

Następna rzecz to ustalenie sobie jakiegoś układu interfejsu.

Piszemy aplikację iOS więc pasowałoby, aby interfejs był spójny z resztą tego środowiska, tak więc mój koncept wygląda tak:

  • Nagłówek z nazwą aktualnej kategorii, zakładki czy konkretnej audycji
  • Treść charakterystyczna dla kontekstu
  • Kontrolki pozwalające na manipulację treścią charakterystyczną dla kontekstu
  • Pasek kart z następującymi elementami
    • Nowości: zbiór najnowszych zasobów
    • Podcasty: wyświetlenie podcastów wedłóg kategorii
    • Artykuły: Wyświetlenie artykułów wedłóg ich kategorii
    • Szukaj: otwarcie wyszukiwarki zasobów.
    • Więcej: na zapas

Tak to się przedstawia. Pewnie jak już poczuję interfejs swojego “dzieła” pod palcami to lekko coś tutaj pozmieniam ale na razie niech będzie tak.

Ostatnia rzecz przed rozpoczęciem właściwego pisania dotyczy wyboru środowiska pracy. Jako, że piszemy aplikację dla systemów Apple to najlepszym (moim zdaniem) wyborem będzie język Swift i środowisko Swift UI.

Jak ktoś nie słyszał to Swift jest następcą stareńkiego już języka Objective C, który to z kolei jest stworzonym przez firmę NextStep, w pełni kompatybilnym ze standardem C językiem programowania używanym do pisania aplikacji dla systemu MacOS, czy później iOS.. Natomiast Swift UI jest następcą stareńkich już frameworków UI Kit i App Kit (odpowiednio iOS i MacOS) służących z grubsza do tworzenia interfejsów graficznych. Nie oznacza to oczywiście, że teraz już wogóle nie korzysta się z App Kit czy UIKit, ale mamnadzieję że w tym artykule nie będziemy musieli testować tego na własnej skórze.

Jeżeli chcecie za mną podąrzać i uruchamiać mój kod, musicie oczywiście zainstalować aplikację XCode ze sklepu App store. Po tym przydługim wstępie przejdźmy w reszcie do roboty.

Konfiguracja XCode

Tę część można spokojnie pominąć, jeżelikorzystaliście już wcześniej ze środowiskaXCode. Jeżeli nie, to ten paragrafpozwoli Wam rozpocząć pracę z wmiarę wygodnymi ustawieniami. Środowisko programistyczne jest jednakbardzoprywatnym programem,więc prędzej czy później zaczniecie je sobie dostosowywać już wedłóg własnych preferencji, no ale każdy gdzieś zaczynał, no nie? 😉

Po otwarciu Xcode ukaże się nam swego rodzaju launcher gdzie mamy między innymi listę ostatnio uruchamianych projektów, przycisk służący do stworzenia nowego projektu, przycisk pozwalający nam sklonować projekt z usługi kontroli wersji czy w reszcie pole wyboru pozwalające na wyłączenie pokazywania tego launchera przy starcie XCode. Osobiście polecam go wyłączyć, gdyż wszystkie te operacje możemy w razie potrzeby wywołać z klawiatury, a to okno wymaga od nas kilku kliknięć, by przejść dalej co skutecznie spowalnia naszą pracę.

Jak już odznaczymy pole wyboru pokazywania okna startowego przy starcie aplikacji, polecam przjeść do preferencji aplikacji XCode. Jak w przypadku większości programów w systemie MacOS, wystarczy użyć skrótu klawiszowego COMMAND+,

Zakładka “General” zawiera podstawowe opcje, takie jak wygląd aplikacji. Tutaj nie potrzebujemy niczego zmieniać, no może poza opcjami “Mac test parallelization” i “Simulator test parallelization”, jednakże znaczenie tych opcji wykracza poza założenia tego artykułu.

Dalsza zakładka (Accounts) jest już sporo ważniejsza gdyż to tutaj możemy dodać nasze konto deweloperskie Apple. Nawet jeżeli nie jesteśmmy zarejestrowanymi deweloperami, warto sobie to Apple ID dodać, bo będziemy mogli podpisywać aplikacje certyfikatem generycznym. Jeżeli jesteśmy zarejestrowanym deweloperem, to na liście obok w tabelce pojawią się wszystkie nasze zespoły. W moim wypadku jest to tylko jeden element o nazwie “Arkadiusz Swietnicki”. To pod tą właśnie nazwą będą publikowane moje aplikacje w sklepie App STore. Ja polecam sobie dodać jeszcze konto Github. Nawet, jeżeli nie planujemy udostępniać kodu naszych aplikacji całemu światu, to przecież nikt nie zabroni nam utworzyć sobie prywatnego repozytorium. Jest to o tyle fajne, że w razie awarii dysku czy innych nieprzewidzianych wypadków, nasze dane są bezpieczne na serwerach.

Dalej mamy kartę “Behaviors” gdzie to możemy ustawiać, co program ma robić gdy wystąpi konkretne zdarzenie. Tutaj polecam w drzewku wybrać gałąź “Build” i włączyć ogłaszanie mową dla zdarzeń “Starts”, “Succeeds”, “Fails”. Wiem, że opcja “generates new issues” może być kusząca ale zakładając, że nie piszemy olbrzymich, wielomodułowych aplikacji dostaniemy tylko niepotrzebny spam, bo “Generates new issues” wystąpi razem z “Fails”. Jeżeli zainteresowałem was programowaniem i po przeczytaniu tego artykułu wiecie, że to jest to to jeszcze w gałęzi “Playgrounds” polecam włączyć mowę dla zdarzenia “Generates output”.

Zakładki “Navigation” i “Themes” możemyna razie pominąć. W zakładce “TextEditing” w kategorii “Display” polecam wyłączyć opcję “Wrap lines to editor width”. Ustawienie to powoduje zawijanie wierszy, ale jako że Swift i Swift UI słyną z długich linii to to zawijanie przynajmniej mnie wprowadza w błąd.

W kategorii “Editing” ja osobiście niczego nie zmieniam, ale wiem, że wiele osób frustrują automatyczne podpowiedzi czy wstawianie nawiasów.

Teraz najważniejsza rzecz jeżeli chodzi o użytkowników VoiceOvera, czyli kategoria “Indentation”. Bardzo serdecznie polecam zmienić opcję “Prefer ident using” ze “Spaces” na “Tabs”. Sprawi to,że zamiast czterech spacji per wcięcie będziemy mięli tylko jeden znak tabulacji. Zalety tegorozwiązania sąoczywiste: strzałkowanie przez linię (w programowaniu robi się to bardzo często) będzie odbywalo się dużo szybciej. Pozostałe opcje w tej kategorii to już tylko i wyłącznie osobiste preferencje. Jeżeli jesteście nowicjuszami to jeszcze nie wiecie, co będzie dla Was najlepsze, a jeżeli wiecie co i jakto polecam tutaj sobie poustawiać.

Dalej mamy między innymi zakładkę “Keybinds”. Ja nie jestem fanem remapowania komend klawiaturowych, więc niestety nie powiem Wam, co i jak się tutaj obsługuje. Dalsze zakładki nie dotyczą już naszego projektu w żaden sposób, więc pozwolę sobie je pominąć.

Tworzenie i konfiguracja projektu

Gdy środowisko Xcode jest już z grubsza gotowe do pracy, możemy przejść w reszcie do konfiguracji naszego projektu. Aby utworzyć nowy projekt, należy nacisnąć skrót CMD+SHIFT+N, względnie przejść do menu File > New > Project, ale to sporo więcej klikania. Gdy ukaże się nam okno tworzenia nowej aplikacji w pierwszym kroku musimy ustalić, co takiego chcemy pisać. Tak więc najpierw musimy wybrać platformę, dla której chcemy tworzyć. Wiem, że opcja :Multiplatform” może być kusząca, niemniej jednak na razie prosiłbym o zaznaczenie opcji “iOS”.

Po kliknięciu w “Next” ukaże się nam okno, w którym to musimy wprowadzić kilka informacji. Poniżej opiszę wszystkie znajdujące się w nim pola:

  • Product name: Jest to nazwa naszej aplikacji. To właśnie tą nazwą nasz program będzie przedstawiał się w systemie, czy sklepie AppStore.
  • Team: Tutaj wybieramy, do jakiego zespołu przypisany jest nasz projekt. Wpływa to M.IN na to, jakie certyfikaty będą używane dla podpisów.
  • Bundle identifier: unikalny identyfikator naszej aplikacji w formacie Reverse DNS. Na przykład dla hipotetycznego oficjalnego klienta Eltena, mogłoby to wyglądać tak: link.elten.eltenify. W moim przypadku jest com.nunosoft.tyflocentrum.
  • Interface: jakiego frameworka do interfejsu chcemy używać? Jak wspomniałem wyżej, my używamy Swift UI, także zostawiamy to pole bez zmian.
  • Language: Swift czy może Objective C? Przez to, że wybraliśmy Swift Ui jako framework, nie ma możliwości używania Objective C jako głównego języka, nie przeszkadza to jednak w pisaniu w nim fragmentów naszej aplikacji.
  • Use Core Data: czy chcemy używać frameworka do baz danych? Chcemy, ale nie chcemy, gdyż nasze potrzeby będą… specyficzne? W każdym razie pole zostaje odznaczone
  • Host in cloud kit: Czy chcemy korzystać z Applowskich serwerów w naszej aplikacji. Zostawiamy, jak jest bo synchronizację z iCloud rozwiążemy inaczej, jeżeli będzie mi się chciało :D.
  • include tests: Odznaczamy. Testy jednostkowe są fajne, ciekawe i potrzebne ale nie, jak robi je za nas IDE.

Klikamy w “Next” i ukazuje nam się okno zapisu plików. Tutaj wszystko, no może poza ścieżką zapisu jest OK. Ja swój projekt zapisałem na dysku iCloud, Wam też polecam wybrać jakąś dogodniejszą niż biurko lokalizację.

Po kliknięciu w “Create” i odczekaniu chwilki wylądujemy w naszym nowo stworzonym mikroświecie. Powitać! Jeżeli macie Maca z procesorem M1 lub nowszym, polecam wcisnąć sobie skrót CMD+R i odczekać jakiś czas. CMD+R uruchamia naszą aplikację, i chociaż na razie jest to pusty szablon, to przynajmniej mi zawsze dawało to motywację do działania :).

nasz projekt jest już w miarę gotowy do pisania. Dlaczego w miarę? A no dlatego, że jest kilka rzeczy, które warto ustawić już na początku. Pierwszą z nich jest minimalna wersja systemu iOS na jakiej będzie działał nasz program. Domyślnie XCode ustawia najnowszą możliwą wersję systemu (w moim przypadku iOS 16.1). Jest to spowodowane faktem, że wtedy mamy możliwość nieograniczonego korzystania ze wszystkich nowych funkcji API. Warto jednak pamiętać o tym, że jest całkiem sporo osób które nie mogą/nie chcą aktualizowac systemu iOS do najnowszej wersji. Jeżeli nie mamy jakichś konkretnych powodów, dla których akurat potrzebujemy korzystać z SDK systemu iOS 16, możemy spokojnie zejść do starszej wersji. Dzięki temu automatycznie poszerzymy potencjalną bazę użytkowników pozwalając im korzystać z naszej aplikacji. Tyflocentrum mogę zdegradować do iOS 15, gdyż to wtedy programiści otrzymali możliwość tworzenia własnych pokręteł do voiceOvera (źródło tutaj).

Przechodząc od teorii do praktyki, należy wcisnąć skrót CMD+1 aby przesunąć kursor do TZW. nawigatora, który to jest zbiorem wszystkich plików i grup wchodzących w skład naszego projektu.

Następnie przechodzimy na samą górę drzewa do samego projektu. Program XCode automatycznie zaktualizuje prawy widok o nowe informacje, w tym wypadku będzie to okno właściwości projektu. Tam przechodzimy do zakładki “General”, potem klikamy w “Minimum Deployments”, “iOS” i zmieniamy “16.X” na “15.X”, gdzie X oznacza numer podwersji na przykład 15.6.

Zmian nie trzeba w żaden sposób zapisywać. Po opuszczeniu zakładki “Deployment targets” zostaną one zachowane automatycznie..

Dalszy krok jest już sporo ciekawszy, gdyż będziemy tworzyli model danych. “A co to jest ten model danych?” – możecie zapytać. Najprościej mówiąc, jest to szablon, który informuje komputer o tym, jakie dane, w jakiej kolejności, jakiego rozmiaru i rodzaju chcemy przechowywać. Jak wspomniałem przy okazji omawiania podstawowych założeń projektu jedną z funkcji aplikacji ma być możliwość zapisywania zasobów do biblioteki, w celu ich późniejszego pobrania, odsłuchania i tak dalej. Jak to zwykle w programowaniu bywa istnieje wiele sposobów na osiągnięcie tego celu. Tym bardziej popularnym jest użycie mechanizmu UserDefaults, ale od razu mówię że to jest na prawdę zły pomysł. Tak, może i jest prostrzy, ale UserDefaults nie służy do zapisywania danych takich, jak zapisane artykuły, a jak sama nazwa wskazuje służy raczej do zapisu preferencji użytkownika czy innych, prostych danych. Dzieje się tak dlatego, że system ładuje wszystko, co zapisaliśmy w UserDefaults zaraz po uruchomieniu. A jak wiadomo, im więcej danych, tym dłuższy loading. CoreData nie cierpi na tę przypadłość, gdyż jest to baza danych, więc służy do właśnie takich rzeczy.

Aby utworzyć taki model należy najpierw wcisnąć skrót CMD+N, względnie przejść do menu “File” > “New” > “File”. Następnie, omijając zakładki “Platform” i “Template filter” w polu “Template chooser” wybrać “CoreData”, a następnie “Data model”.

Ja model nazywam dokładnie tak, jak projekt czyli w tym przypadku “Tyflocentrum”.

Po utworzeniu modelu XCode automatycznie załaduje go do prawego widoku. Idziemy tam i klikamy “New entity”. I znowu pora na teorię: Modele składają się z podmiotów (entities), a podmioty mają atrybuty (attributes). Podmioty to obiekty, na przykład “Książka”, “Człowiek”, “Kwiotek”, a atrybuty to na przykład “imię”, “wiek”, “zawód”. I tak nasz podmiot musi otrzymać nazwę “LocalResource”. Wypełniamy to zatem i klikamy w “New attribute”. Poniżej opiszę atrybuty wraz z ich typami i krótkim wyjaśnieniem co i jak.

CDN. Chcecie dalej? Bo appka już prawie gotowa.

350 komentarzy

  1. Hey there! I’ve been reading your weblog for some time
    now and finally got the courage to go ahead and give you a shout out from Houston Tx!
    Just wanted to say keep up the fantastic job!

    Have a look at my website web Page

  2. best payout online slots canada, online poker canada vpn and australian casino free spins, or online casino canada olg

    my site … making a living off gambling – Agnes,

  3. You have made some really good points there. I checked on the
    net for more information about the issue
    and found most individuals will go along with your views on this site.

    Also visit my homepage webpage

  4. Great article, thank you for sharing these insights! I’ve tested many methods for building backlinks, and what really worked for me was using AI-powered automation. With us, we can scale link building in a safe and efficient way. It’s amazing to see how much time this saves compared to manual outreach. https://seoexpertebamberg.de/

  5. I must say this article is extremely well written, insightful, and packed with valuable knowledge that shows the author’s deep expertise on the subject, and I truly appreciate the time and effort that has gone into creating such high-quality content because it is not only helpful but also inspiring for readers like me who are always looking for trustworthy resources online. Keep up the good work and write more. i am a follower. https://webdesignfreelancerfrankfurt.de/

  6. Hello to all, the contents existing at this web site are actually awesome for people
    experience, well, keep up what is the most expensive casino in the world (Emile) good work
    fellows.

  7. fully cashable no deposit bonus canada, canadian pokie machines monte casino deal for 2
    (Aurora) sale and craps betting usa, or the top online pokies and casinos in australia day

  8. Great article, thank you for sharing these insights! I’ve tested many methods for building backlinks, and what really worked for me was using AI-powered automation. With us, we can scale link building in a safe and efficient way. It’s amazing to see how much time this saves compared to manual outreach.

  9. slots no wagering uk, united statesn online pokies paysafe
    and can i use td united states trust visa debit for online gambling, or canadian how much money does the casino heist pay [Ferdinand]
    guide 2021 review

  10. best online pokie canada, usa online casino reviews and
    best casino site australia, or best online pokies new zealand casino free play theft, Veda,

  11. statistics computation of probability of winning in gambling (Lidia) gambling in canada, top slot games uk and online casino
    uk casino club, or top 10 casino canada

  12. united kingdom casino down game load machine no play slot, united statesn poker and cash
    freuky casino free chips, or best slot games online
    uk

    Here is my web site :: gambling account mortgage (Lashunda)

  13. united statesn gambling, united statesn online casino win real money and online gambling united states poker,
    or poker runs united states 2021

    Also visit my blog … what is doubling down blackjack (Ahmed)

  14. gambling in canada statistics, united statesn online casinos and united
    statesn online casinos 2021 real money, or craps guide uk

    Also visit my web blog; webcam afbraak casino middelkerke [Sheri]

  15. united kingdom gambling news, betsoft planet casino no deposit bonus 2022 (Ignacio) deposit bonus
    united kingdom and new usa free spins no deposit, or gambling
    bonuses co usa

  16. casino dubuque (Adan) uk pay by phone bill, best poker online
    new zealand and new no deposit casino 2021 australia,
    or australian top online casino

  17. Нужен подробный рейтинг онлайн-казино для игроков из РФ? Устал от скрытой рекламы? Тогда заходи на независимый навигатор по рекомендуемым казино, где аккуратно упакованы сравнения по фриспинам, провайдерам, депозитам и валютам. Каждый апдейт — это живые отзывы, минимум воды и всё по сути. Сравнивай альтернативы, забирай промо, доверяй аналитике и играй ответственно. Твой ориентир к правильному решению — в одном клике. Переходи: где играть онлайн казино пополнение через payeer. Сегодня в канале уже свежие топы на эту неделю — успевай первым!

  18. Нужен реальный топ casino-проектов в России? Сколько можно терпеть сомнительных списков? В таком случае заходи на независимый источник по лучшим казино, где удобно собраны обзоры по кешбэку, турнирам, депозитам и методам оплаты. Каждый апдейт — это скрин-примеры, никакой воды и максимум пользы. Смотри, кто в топе, лови акции, ориентируйся на данные и играй ответственно. Твоя карта к правильному решению — по ссылке. Подписывайся: топ онлайн казино с фриспинами. Прямо сейчас в ленте уже горячие сравнения на текущий месяц — присоединяйся!

  19. Ищешь подробный шорт-лист casino-проектов с рублёвыми платежами? Устал от сомнительных списков? В таком случае заходи на живой канал по топовым онлайн-казино, где аккуратно упакованы сравнения по скорости вывода, турнирам, службе поддержки и методам оплаты. Каждый материал — это скрин-примеры, никакой воды и главное по делу. Сравнивай альтернативы, следи за апдейтами, доверяй аналитике и играй ответственно. Твоя карта к адекватному выбору — в одном клике. Подписывайся: топ казино для новичков условия. В этот момент в канале уже горячие сравнения на сентябрь 2025 — успевай первым!

  20. Ищешь реальный топ онлайн-казино с рублёвыми платежами? Сколько можно терпеть сомнительных списков? Регулярно подключайся на независимый источник по надёжным казино, где в одном месте есть топ-подборки по скорости вывода, провайдерам, лимитам выплат и методам оплаты. Каждый апдейт — это чёткие факты, без лишней воды и максимум пользы. Выбирай разумно, следи за апдейтами, вставай на сторону математики и соблюдай банкролл. Твой компас к максимальной информированности — по кнопке ниже. Жми: рейтинг онлайн казино россия 2025. Прямо сейчас на странице уже актуальные рейтинги на сегодняшний день — успевай первым!

  21. Подбираешь объективный рейтинг casino-проектов с рублёвыми платежами? Устал от сомнительных списков? Значит подписывайся на ежедневно обновляемый навигатор по топовым онлайн-казино, где удобно собраны сравнения по фриспинам, турнирам, верификации и валютам. Каждая подборка — это чёткие факты, без хайпа и всё по сути. Смотри, кто в топе, лови акции, доверяй аналитике и помни про риски. Твой быстрый путь к адекватному выбору — по ссылке. Подписывайся: сравнение онлайн казино с авиатором. Сегодня в ленте уже горячие сравнения на сентябрь 2025 — успевай первым!

  22. Ищешь объективный рейтинг игровых сайтов в России? Сколько можно терпеть пустых обещаний? Тогда заглядывай на живой канал по рекомендуемым игровым площадкам, где удобно собраны обзоры по скорости вывода, турнирам, лимитам выплат и методам оплаты. Каждая подборка — это конкретные метрики, без лишней воды и всё по сути. Отбирай фаворитов, не пропускай фриспины, опирайся на цифры и соблюдай банкролл. Твоя карта к правильному решению — по ссылке. Жми: топ вывод на карту мир казино. Прямо сейчас в ленте уже актуальные рейтинги на текущий месяц — будь в теме!

  23. Ищешь объективный топ онлайн-казино с быстрыми выплатами? Сколько можно терпеть купленных обзоров? Тогда заглядывай на проверенный гайд по топовым игровым площадкам, где удобно собраны обзоры по скорости вывода, турнирам, верификации и мобильным приложениям. Каждый апдейт — это чёткие факты, никакой воды и главное по делу. Отбирай фаворитов, следи за апдейтами, ориентируйся на данные и играй ответственно. Твой ориентир к честному сравниванию — здесь. Забирай пользу: сравнение казино по скорости вывода 2025 россия. Прямо сейчас в ленте уже горячие сравнения на сентябрь 2025 — успевай первым!

  24. Подбираешь реальный рейтинг игровых сайтов с рублёвыми платежами? Сколько можно терпеть скрытой рекламы? Значит заглядывай на независимый источник по рекомендуемым онлайн-казино, где удобно собраны топ-подборки по скорости вывода, RTP, службе поддержки и зеркалам. Каждая подборка — это чёткие факты, без лишней воды и главное по делу. Выбирай разумно, лови акции, вставай на сторону математики и помни про риски. Твой быстрый путь к честному сравниванию — в одном клике. Жми: топ казино по условиям лояльности россия. Прямо сейчас в канале уже новые подборки на текущий месяц — будь в теме!

  25. Нужен реальный обзор игровых сайтов в России? Устал от купленных обзоров? Тогда подписывайся на независимый канал по лучшим игровым площадкам, где в одном месте есть обзоры по бонусам, RTP, верификации и мобильным приложениям. Каждый пост — это скрин-примеры, никакой воды и всё по сути. Выбирай разумно, забирай промо, вставай на сторону математики и держи контроль. Твой ориентир к максимальной информированности — здесь. Переходи: топ казино с tinkoff выплатами. Сейчас на странице уже новые подборки на сентябрь 2025 — будь в теме!

  26. Хочешь найти подробный шорт-лист онлайн-казино с быстрыми выплатами? Надоели сомнительных списков? В таком случае заходи на ежедневно обновляемый канал по лучшим игровым площадкам, где удобно собраны обзоры по скорости вывода, RTP, лимитам выплат и мобильным приложениям. Каждый материал — это чёткие факты, без хайпа и главное по делу. Смотри, кто в топе, не пропускай фриспины, опирайся на цифры и играй ответственно. Твой ориентир к правильному решению — здесь. Забирай пользу: сравнение онлайн казино рублевые платежи. В этот момент в ленте уже горячие сравнения на сентябрь 2025 — будь в теме!

  27. Подбираешь реальный топ площадок для игры для игроков из РФ? Надоели купленных обзоров? В таком случае подключайся на независимый источник по лучшим онлайн-казино, где собраны обзоры по кешбэку, RTP, службе поддержки и мобильным приложениям. Каждая подборка — это скрин-примеры, никакой воды и всё по сути. Выбирай разумно, следи за апдейтами, доверяй аналитике и играй ответственно. Твоя карта к максимальной информированности — по ссылке. Переходи: рейтинг казино по кэшбэку слоты. Сейчас на странице уже свежие топы на сентябрь 2025 — будь в теме!

  28. Нужен объективный шорт-лист игровых сайтов с быстрыми выплатами? Надоели скрытой рекламы? Регулярно подписывайся на ежедневно обновляемый навигатор по лучшим казино, где в одном месте есть сравнения по фриспинам, RTP, лимитам выплат и валютам. Каждый материал — это живые отзывы, никакой воды и главное по делу. Сравнивай альтернативы, не пропускай фриспины, доверяй аналитике и соблюдай банкролл. Твой ориентир к честному сравниванию — в одном клике. Жми: лучшие онлайн казино топ по выплатам россия. Сегодня в ленте уже актуальные рейтинги на сентябрь 2025 — будь в теме!

  29. Ищешь честный шорт-лист онлайн-казино для игроков из РФ? Устал от сомнительных списков? Регулярно заходи на ежедневно обновляемый источник по лучшим казино, где собраны обзоры по фриспинам, RTP, лимитам выплат и методам оплаты. Каждый пост — это скрин-примеры, минимум воды и полезная выжимка. Сравнивай альтернативы, не пропускай фриспины, вставай на сторону математики и помни про риски. Твой ориентир к правильному решению — по ссылке. Забирай пользу: сравнение онлайн казино blackjack. В этот момент на странице уже актуальные рейтинги на эту неделю — присоединяйся!

  30. Нужен подробный топ игровых сайтов в России? Надоели купленных обзоров? Тогда заглядывай на независимый канал по лучшим игровым площадкам, где собраны рейтинги по скорости вывода, провайдерам, депозитам и валютам. Каждый апдейт — это живые отзывы, без лишней воды и главное по делу. Выбирай разумно, лови акции, вставай на сторону математики и держи контроль. Твоя карта к адекватному выбору — по ссылке. Жми: рейтинг онлайн казино pragmatic play слоты 2025. Сейчас в канале уже свежие топы на сентябрь 2025 — успевай первым!

  31. Подбираешь объективный шорт-лист онлайн-казино в России? Устал от сомнительных списков? Регулярно заглядывай на проверенный канал по рекомендуемым онлайн-казино, где удобно собраны рейтинги по кешбэку, провайдерам, верификации и мобильным приложениям. Каждый апдейт — это чёткие факты, без лишней воды и главное по делу. Смотри, кто в топе, не пропускай фриспины, вставай на сторону математики и соблюдай банкролл. Твой ориентир к правильному решению — в одном клике. Жми: лучшие казино crash россия 2025. Сегодня на странице уже свежие топы на текущий месяц — забирай инсайты!

  32. Ищешь реальный рейтинг онлайн-казино для игроков из РФ? Сколько можно терпеть купленных обзоров? Тогда подключайся на ежедневно обновляемый канал по надёжным онлайн-казино, где удобно собраны сравнения по кешбэку, лицензиям, депозитам и валютам. Каждая подборка — это живые отзывы, никакой воды и главное по делу. Смотри, кто в топе, лови акции, опирайся на цифры и играй ответственно. Твой ориентир к правильному решению — здесь. Жми: где играть онлайн казино пополнение через юmoney. Сейчас в канале уже свежие топы на текущий месяц — успевай первым!

  33. I don’t think the title of your article matches the content lol. Just kidding, mainly because I had some doubts after reading the article.

  34. Лучшие казинo в рейтинге 2025. Играйте в самое лучшее интернет-казинo. Список топ-5 казино с хорошей репутацией, быстрым выводом, выплатами на карту в рублях, минимальные ставки. Выбирайте надежные игровые автоматы и честные мобильные казинo с лицензией.
    https://t.me/s/luchshiye_onlayn_kazino

  35. Получи лучшие казинo России 2025 года! ТОП-5 проверенных платформ с лицензией для игры на реальные деньги. Надежные выплаты за 24 часа, бонусы до 100000 рублей, минимальные ставки от 10 рублей! Играйте в топовые слоты, автоматы и live-казинo с максимальны
    https://t.me/s/TopCasino_Official

  36. Получи лучшие казинo России 2025 года! ТОП-5 проверенных платформ с лицензией для игры на реальные деньги. Надежные выплаты за 24 часа, бонусы до 100000 рублей, минимальные ставки от 10 рублей! Играйте в топовые слоты, автоматы и live-казинo с максимальны
    https://t.me/s/RuCasino_top

  37. Fantastic read! 👏 I really appreciate how clearly you explained the topic—your writing not only shows expertise but also makes the subject approachable for a wide audience. It’s rare to come across content that feels both insightful and practical at the same time. At explodingbrands.de we run a growing directory site in Germany that features businesses from many different categories. That’s why I truly value articles like yours, because they highlight how knowledge and visibility can create stronger connections between people, services, and opportunities.Keep up the great work—I’ll definitely be checking back for more of your insights! 🚀

  38. Pingback: 20 mg cialis pills
  39. Pingback: viagra 50 mg price
  40. Pingback: eli lilly cialis
  41. Pingback: buy cialis pro
  42. Pingback: female cialis 10mg
  43. Официальный Telegram канал 1win Casinо. Казинo и ставки от 1вин. Фриспины, актуальное зеркало официального сайта 1 win. Регистрируйся в ван вин, соверши вход в один вин, получай бонус используя промокод и начните играть на реальные деньги.
    https://t.me/s/Official_1win_kanal/4691

  44. Официальный Telegram канал 1win Casinо. Казинo и ставки от 1вин. Фриспины, актуальное зеркало официального сайта 1 win. Регистрируйся в ван вин, соверши вход в один вин, получай бонус используя промокод и начните играть на реальные деньги.
    https://t.me/s/Official_1win_kanal/1491

  45. Официальный Telegram канал 1win Casinо. Казинo и ставки от 1вин. Фриспины, актуальное зеркало официального сайта 1 win. Регистрируйся в ван вин, соверши вход в один вин, получай бонус используя промокод и начните играть на реальные деньги.
    https://t.me/s/Official_1win_kanal/801

  46. Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.

  47. Pingback: cialis daily use
  48. Pingback: cialis pastilla
  49. Pingback: cost of clomid
  50. Pingback: rybelsus 3mg
  51. I don’t think the title of your article matches the content lol. Just kidding, mainly because I had some doubts after reading the article.

  52. Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?

  53. Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?

  54. Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?

  55. Beyond news reporting, BusinessIraq.com provides essential business resources including economic indicators, market research, and industry reports. Our platform maintains strong relationships with chambers of commerce, government agencies, and industry associations to ensure accurate and timely information. Whether you’re a local entrepreneur, international investor, or market analyst, our comprehensive coverage helps you make informed decisions in Iraq’s dynamic business landscape.

  56. Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.

  57. Navigate Iraq’s bustling business landscape with confidence through Businessiraq.com, your ultimate resource for comprehensive market intelligence and networking opportunities. This dynamic platform hosts an extensive Iraq business directory, featuring detailed profiles of local and international companies operating across the country. Stay ahead of market trends with current business news in Iraq, expertly curated to provide valuable insights into economic developments and industry-specific updates. The platform’s extensive database of Iraq jobs connects talented professionals with leading employers, while its tender directory offers a gateway to countless procurement opportunities. Through its sophisticated online business listings, Businessiraq.com facilitates meaningful connections between businesses, fostering growth and collaboration in Iraq’s vibrant economy

  58. At BWER Company, we specialize in weighbridge solutions tailored to Iraq’s diverse industries, ensuring accurate weight management, efficient operations, and compliance with international quality standards.

  59. Bwer Company is a top supplier of weighbridge truck scales in Iraq, providing a complete range of solutions for accurate vehicle load measurement. Their services cover every aspect of truck scales, from truck scale installation and maintenance to calibration and repair. Bwer Company offers commercial truck scales, industrial truck scales, and axle weighbridge systems, tailored to meet the demands of heavy-duty applications. Bwer Company’s electronic truck scales and digital truck scales incorporate advanced technology, ensuring precise and reliable measurements. Their heavy-duty truck scales are engineered for rugged environments, making them suitable for industries such as logistics, agriculture, and construction. Whether you’re looking for truck scales for sale, rental, or lease, Bwer Company provides flexible options to match your needs, including truck scale parts, accessories, and software for enhanced performance. As trusted truck scale manufacturers, Bwer Company offers certified truck scale calibration services, ensuring compliance with industry standards. Their services include truck scale inspection, certification, and repair services, supporting the long-term reliability of your truck scale systems. With a team of experts, Bwer Company ensures seamless truck scale installation and maintenance, keeping your operations running smoothly. For more information on truck scale prices, installation costs, or to learn about their range of weighbridge truck scales and other products, visit Bwer Company’s website at bwerpipes.com.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

EltenLink