[{"title":"Cape Lighthouse: build a geometric seascape with 17 closed paths in VectorPaint","category":"Projects","url":"https://allluckly.cn/en/works/vectorpaint-cape-lighthouse-duo/","markdown_url":"https://allluckly.cn/en/works/vectorpaint-cape-lighthouse-duo/index.md","description":"Use closed pen paths, fills and strokes in VectorPaint on an iPhone Duo simulator to build a sun, mountains, sea, cape and lighthouse. Follow the stacking of 17 objects, a window-closure mistake and three separate wave highlights.","date":"2026-10-23T07:25:17+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"Moonlit Pines: build a geometric night landscape with Aquarell polygon selections","category":"Projects","url":"https://allluckly.cn/en/works/aquarell-moonlit-pines-duo/","markdown_url":"https://allluckly.cn/en/works/aquarell-moonlit-pines-duo/index.md","description":"Use polygon selections, fills and four layers in Aquarell on an iPhone Duo simulator to make snowy mountains, three pines, a moon, twelve stars and lake reflections. Includes a chaptered video, a five-colour palette and the native 1400×1000 PNG.","date":"2026-10-23T06:22:25+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell creative process: paint a night scene with soft pools of light","category":"Projects","url":"https://allluckly.cn/en/works/aquarell-night-glow/","markdown_url":"https://allluckly.cn/en/works/aquarell-night-glow/index.md","description":"Layer short mint, lilac and warm-white brush marks over deep blue to practise brush size, opacity and empty space. Includes the recorded workflow, colour settings and native exported artwork.","date":"2026-10-23T02:46:01+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"VectorPaint creative process: a sunset mountain scene in three colours","category":"Projects","url":"https://allluckly.cn/en/works/vectorpaint-geometric-sunset/","markdown_url":"https://allluckly.cn/en/works/vectorpaint-geometric-sunset/index.md","description":"Start with a square canvas, close an octagon and two triangles with the pen, then set fills, turn off strokes and export PNG.","date":"2026-10-23T02:33:05+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"Yearn virtual controller: adjust size, opacity and haptic feedback","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-virtual-controller/","markdown_url":"https://allluckly.cn/en/guides/yearn-virtual-controller/index.md","description":"Compare virtual-controller size and opacity in a fixed game scene, checking portrait, landscape, directional and action buttons to find a comfortable grip layout.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn speed controls: fast-forward through waits and slow down actions","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-speed-control/","markdown_url":"https://allluckly.cn/en/guides/yearn-speed-control/index.md","description":"Compare normal, fast and slow speed step by step, checking button actions, sound, picture and save state, and distinguish running speed from turbo-fire controls.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn screenshots: save a game image and organise your records","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-screenshots/","markdown_url":"https://allluckly.cn/en/guides/yearn-screenshots/index.md","description":"Save a game image in Yearn, confirm it in Photos, distinguish game captures from system screenshots and keep identifiable progress or troubleshooting records.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn screen size: adjust scaling, aspect ratio and margins","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-screen-size/","markdown_url":"https://allluckly.cn/en/guides/yearn-screen-size/index.md","description":"Use circles, text and screen edges to judge display scaling, distinguishing useful enlargement, stretched proportions and controls obscuring the picture.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn on a TV: check picture and delay with iPhone screen mirroring","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-screen-mirroring/","markdown_url":"https://allluckly.cn/en/guides/yearn-screen-mirroring/index.md","description":"Use Apple’s system screen mirroring to show Yearn on a compatible TV, then check connection, orientation, audio and input delay separately.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn save states: keep key progress in separate slots","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-save-slots/","markdown_url":"https://allluckly.cn/en/guides/yearn-save-slots/index.md","description":"Distinguish Save from Load, record different scenes in two slots and verify loading in the same session and after reopening, avoiding overwriting your only progress.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn file recognition: distinguish platform formats and disc companion files","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-rom-formats/","markdown_url":"https://allluckly.cn/en/guides/yearn-rom-formats/index.md","description":"Check ROM names, extensions, platforms and companion files, distinguishing single-file games, PS1 disc images and archives to reduce import mistakes.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Import PS1 disc images into Yearn: CUE, BIN and multiple tracks","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-ps1-disc-files/","markdown_url":"https://allluckly.cn/en/guides/yearn-ps1-disc-files/index.md","description":"Organise PS1 disc images you lawfully hold, distinguish track descriptions from data files, and check filename references, companion imports and causes of launch failure.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Prepare Yearn for offline travel: games, BIOS and saves","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-offline-trip/","markdown_url":"https://allluckly.cn/en/guides/yearn-offline-trip/index.md","description":"Use airplane mode before travelling to check local games, required BIOS files, controllers and saves, separating online information and cloud placeholders from files that really run offline.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Organise the Yearn library: search, favourites, covers and recent games","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-library-organizing/","markdown_url":"https://allluckly.cn/en/guides/yearn-library-organizing/index.md","description":"Build a searchable imported-game list with platform filters, sorting, search and favourites, distinguishing cover images from runnable game files.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Troubleshoot Yearn launch: from a successful import to a running game","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-launch-troubleshooting/","markdown_url":"https://allluckly.cn/en/guides/yearn-launch-troubleshooting/index.md","description":"Separate launch failures into file, platform, BIOS, runtime and input stages, using small repeatable tests to identify what needs attention.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn landscape and dual screens: give the game and controls their own space","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-landscape-layout/","markdown_url":"https://allluckly.cn/en/guides/yearn-landscape-layout/index.md","description":"Use a safe game scene to check orientation, controller size and dual-screen content, distinguishing system rotation lock, device layout and the game’s original aspect ratio.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn iCloud save sync: check cloud status before switching devices","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-icloud-saves/","markdown_url":"https://allluckly.cn/en/guides/yearn-icloud-saves/index.md","description":"Check iCloud availability and manual sync, distinguish copying cloud files from actually loading progress in a game, and keep verifiable local records before changing devices.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn getting started: import your own first game and exit safely","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-getting-started/","markdown_url":"https://allluckly.cn/en/guides/yearn-getting-started/index.md","description":"Begin with a ROM you supply, then import it, confirm its platform, check controls, save manually and verify after exit for a clear first-use workflow.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn folder import: organise a batch of games and check omissions","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-folder-import/","markdown_url":"https://allluckly.cn/en/guides/yearn-folder-import/index.md","description":"Organise folders and matching filenames before importing, then verify each platform and sample, understanding the relationship between batch copies and original files.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Troubleshoot Yearn controller input: button positions, D-pad and stick dead zones","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-controller-input-check/","markdown_url":"https://allluckly.cn/en/guides/yearn-controller-input-check/index.md","description":"Use a fixed scene to check physical-button positions and stick response, avoid mistaking different letter labels for faults, and adjust the dead zone in small steps.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn Bluetooth controller: pair and check button responses","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-bluetooth-controller/","markdown_url":"https://allluckly.cn/en/guides/yearn-bluetooth-controller/index.md","description":"Pair the controller in iOS, then check recognition, directions and action buttons in Yearn, distinguishing system connection, app input and game response.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn BIOS setup: check required files for each platform","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-bios-setup/","markdown_url":"https://allluckly.cn/en/guides/yearn-bios-setup/index.md","description":"Understand the different roles of ROM and BIOS, check required PS1 files and NDS status, retain source information and investigate missing-file messages after import.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn storage cleanup: back up before deleting games and saves","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-backup-delete/","markdown_url":"https://allluckly.cn/en/guides/yearn-backup-delete/index.md","description":"Distinguish ROMs, save states, in-game saves and screenshots before cleanup, keep independent copies and confirm which data each deletion affects.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"Yearn in-game saves and save states: verify that saved progress loads","category":"Tutorials","url":"https://allluckly.cn/en/guides/yearn-autosave-battery/","markdown_url":"https://allluckly.cn/en/guides/yearn-autosave-battery/index.md","description":"Distinguish the game’s own save menu from emulator states, test save, exit, reopen and load, and understand why autosave settings do not replace a restore check.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Yearn","keywords":[],"version_note":""}
,{"title":"VectorPaint wordmark spacing: adjust the visual rhythm of a short name","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-wordmark-spacing/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-wordmark-spacing/index.md","description":"Compare default spacing, overall tracking and local gaps for a short name, keep the editable text and check small-size and reversed-out versions.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint weather icons: balance sun, cloud and rain at one visual size","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-weather-icon-set/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-weather-icon-set/index.md","description":"Create three weather icons using a shared baseline, line width, outer bounds and small-size previews to establish consistent visual rules.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint wayfinding: make consistent signs for three spaces","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-wayfinding-signs/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-wayfinding-signs/index.md","description":"Use fictional reading, exhibition and rest areas to practise shared arrow, text and symbol rules, checking readability from a distance and at small sizes.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint two-colour overlaps: compare opacity and stacking order","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-transparent-overlap/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-transparent-overlap/index.md","description":"Use two coloured shapes and a fixed background to compare object opacity, overlapping areas and front-to-back order in an explainable colour study.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint timeline: arrange five stages with descriptions of different lengths","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-timeline/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-timeline/index.md","description":"Make a five-stage project timeline, distinguish sequence diagrams from time-scaled layouts, and handle varied descriptions, node spacing and later updates.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint sticker illustration: draw a white backing and check transparent edges","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-sticker-outline/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-sticker-outline/index.md","description":"Build a white backing outline by hand, handling inward corners, narrow gaps and transparent edges, and distinguish a visual sticker border from a print cut line.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint route diagram: explain directions with paths, stops and a legend","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-route-map/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-route-map/index.md","description":"Use a simplified walking route to practise paths, numbered stops, text and a legend, making the information sequence easier to read than the decoration.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint repeating patterns: check a tile’s four edges by hand","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-repeat-tile/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-repeat-tile/index.md","description":"Start from a square tile, manually duplicate leaves and dots, check opposite-edge correspondence and use a nine-tile preview to spot seams.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint small-print checks: verify size and fine lines in a PDF proof","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-print-proof/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-print-proof/index.md","description":"Prepare a PDF proof for a small card, check document units, physical size, text, fine lines and trim bounds, then confirm production requirements with the printer.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint product cards: expand one reusable layout into a series","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-price-card-series/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-price-card-series/index.md","description":"Make three fictional product cards, handling different name lengths, specifications, prices and image areas, then check for old information left after duplication.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint phone wallpaper: leave room for time, icons and the main image","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-phone-wallpaper/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-phone-wallpaper/index.md","description":"Match the target phone’s proportions, reserve lock-screen time and home-screen icon areas, and preview actual wallpaper settings to check cropping, contrast and subject placement.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint logo delivery: check light, dark and small-size versions","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-logo-handoff/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-logo-handoff/index.md","description":"Organise an editable original, SVG and PNG for a finished logo, check colour, transparency, text and small-size rendering, and explain the purpose of each file.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint box illustration: build consistent perspective from three planes","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-isometric-box/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-isometric-box/index.md","description":"Draw a box’s top, left and right faces with the pen, use shared vertices and values for volume, then check gaps and distortion along the edges.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint three-step diagram: explain a process through continuous action","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-instruction-panels/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-instruction-panels/index.md","description":"Illustrate watering in three panels, keeping object positions and proportions consistent while using numbers, changed actions and short text to explain the process.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint geometric portrait: describe features and hair with a few shapes","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-geometric-portrait/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-geometric-portrait/index.md","description":"Build a geometric portrait from the head outline, hairstyle and facial features, controlling symmetry, overlap and recognition at small sizes.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint contour-style illustration: organise spacing with open curves","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-contour-lines/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-contour-lines/index.md","description":"Draw contour-like curves by hand, practising open paths, node direction, line spacing and cropping in an abstract terrain illustration.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint botanical greeting card: a leafy border with room for text","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-botanical-card/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-botanical-card/index.md","description":"Arrange branches around a short greeting, practising curve direction, varied repetition, border density and text space to finish a botanical card.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint bilingual titles: balance Chinese, English and supporting information","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-bilingual-title/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-bilingual-title/index.md","description":"Use a Chinese–English event title to practise hierarchy, apparent type size, line spacing and alignment rather than matching font-size numbers mechanically.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint bar chart: keep lengths, numbers and units consistent","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-bar-chart/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-bar-chart/index.md","description":"Draw a three-item bar chart manually, calculate lengths to one scale and check the zero baseline, labels and data source to avoid misleading graphics.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint avatar adaptation: check circular crops and square previews","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-avatar-crops/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-avatar-crops/index.md","description":"Make square and circular checks of the same avatar, identify cropped head, shoulder and decoration areas, and preserve consistent margins and a clear small-size silhouette.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"Book Isle WebDAV sync: continue reading records across two devices","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-webdav-sync/","markdown_url":"https://allluckly.cn/en/guides/nasbook-webdav-sync/index.md","description":"Use two devices and a test note to verify two-way updates, distinguish reading-data sync from original-book downloads, and resolve conflicts using clear evidence.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Connect Book Isle to WebDAV: download a book from a private library","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-webdav-library/","markdown_url":"https://allluckly.cn/en/guides/nasbook-webdav-library/index.md","description":"Set up a private WebDAV library, check address, path and permissions, download one ebook and verify offline reading, separating library access from reading-data sync.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Read TXT in Book Isle: check encoding, chapter detection and contents links","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-txt-encoding-chapters/","markdown_url":"https://allluckly.cn/en/guides/nasbook-txt-encoding-chapters/index.md","description":"Distinguish encoding corruption from chapter-detection problems, prepare a UTF-8 copy with consistent headings, and check import, contents and resume position.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle categories: plan reading with tags, status and ratings","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-tags-status-rating/","markdown_url":"https://allluckly.cn/en/guides/nasbook-tags-status-rating/index.md","description":"Distinguish topic tags, reading status and personal ratings, establish rules with six books, then organise shelves through combined filters and small batch actions.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Connect Book Isle to SMB: browse NAS ebooks on a home network","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-smb-library/","markdown_url":"https://allluckly.cn/en/guides/nasbook-smb-library/index.md","description":"Enter the SMB server, share name and internal path separately, then check folder access, one-book download and the limits of local-network and offline availability.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle reading statistics: review a week and set a sustainable goal","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-reading-statistics/","markdown_url":"https://allluckly.cn/en/guides/nasbook-reading-statistics/index.md","description":"Check a week’s time range and effort by book, set sustainable reading goals and reminders, then review exported records.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Export Book Isle reading data: keep notes, highlights and statistics","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-reading-data-export/","markdown_url":"https://allluckly.cn/en/guides/nasbook-reading-data-export/index.md","description":"Export notes, highlights and reading statistics as Markdown or CSV, verify the save location and contents, and distinguish readable archives from a complete restorable backup.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Read PDFs in Book Isle: find information with pages, contents and search","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-pdf-navigation-search/","markdown_url":"https://allluckly.cn/en/guides/nasbook-pdf-navigation-search/index.md","description":"Use PDF page numbers, embedded contents and text search, distinguishing file pages from printed numbers and scanned images from a text layer.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Connect Book Isle to OPDS: browse, search and acquire ebooks","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-opds-library/","markdown_url":"https://allluckly.cn/en/guides/nasbook-opds-library/index.md","description":"Find the real OPDS catalogue URL, browse and search, choose a readable format to download, and troubleshoot working catalogues with broken acquisition links.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle excerpts: keep highlights and notes, then make a quote card","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-notes-quote-cards/","markdown_url":"https://allluckly.cn/en/guides/nasbook-notes-quote-cards/index.md","description":"Select original text, save highlights and personal notes, check quote-card wording and attribution, then share or save an image of the result.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle duplicate imports: handle EPUB and PDF versions of one book","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-multiple-formats/","markdown_url":"https://allluckly.cn/en/guides/nasbook-multiple-formats/index.md","description":"Distinguish duplicates from multiple formats in import previews, verify primary and alternate EPUB or PDF formats, and keep different editions and reading positions separate.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle metadata: organise titles, authors, series and covers","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-metadata-editing/","markdown_url":"https://allluckly.cn/en/guides/nasbook-metadata-editing/index.md","description":"Check titles, authors, series and covers through individual books and small batches, avoiding accidental merging of different editions with the same title.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle getting started: import your first EPUB and resume reading","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-getting-started/","markdown_url":"https://allluckly.cn/en/guides/nasbook-getting-started/index.md","description":"Import a local EPUB, jump between chapters, save your position and check offline access, without mistaking a remote cover for downloaded text.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle full-text search: find a book and position from a phrase","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-full-text-search/","markdown_url":"https://allluckly.cn/en/guides/nasbook-full-text-search/index.md","description":"Test book, text and note searches with a known phrase, narrow the scope step by step, and distinguish unavailable downloads, index preparation and scanned-image limits.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle EPUB layout: find a comfortable density for long novels","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-epub-typesetting/","markdown_url":"https://allluckly.cn/en/guides/nasbook-epub-typesetting/index.md","description":"Compare font size, typeface, background and orientation within the same chapter, establish a comfortable layout and understand page-number changes after reflow.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Read documents in Book Isle: organise Markdown, HTML and Office files","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-document-reading/","markdown_url":"https://allluckly.cn/en/guides/nasbook-document-reading/index.md","description":"Import Markdown, HTML, RTF and DOCX as personal reading material, check text, external images and layout limits, then organise a searchable document shelf.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Connect Book Isle to Calibre Content Server: read your computer library on iPad","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-calibre-server/","markdown_url":"https://allluckly.cn/en/guides/nasbook-calibre-server/index.md","description":"Configure Calibre Content Server, distinguish catalogue-metadata sync from actual downloads, and check computer sleep, permissions and offline-reading limits.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Read a Calibre database in Book Isle: metadata.db and book paths","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-calibre-database/","markdown_url":"https://allluckly.cn/en/guides/nasbook-calibre-database/index.md","description":"Access Calibre metadata.db through a NAS, understand the database, library root and relative book paths, and avoid successful catalogue sync with inaccessible book downloads.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle audiobooks: import audio and check listening progress","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-audiobook-reading/","markdown_url":"https://allluckly.cn/en/guides/nasbook-audiobook-reading/index.md","description":"Use a short audio file to check import, time position, chapter order and resume. Try speed and timer controls where available and verify which files are offline.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"Book Isle app lock: protect the shelf and check unlocking","category":"Tutorials","url":"https://allluckly.cn/en/guides/nasbook-app-lock/","markdown_url":"https://allluckly.cn/en/guides/nasbook-app-lock/index.md","description":"Enable and test app lock, understand system authentication, failed attempts and disabling, and distinguish app-access protection from exported-file and NAS permissions.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Book Isle","keywords":[],"version_note":""}
,{"title":"ManYue Wi-Fi import: upload a comic from a computer browser","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-wifi-import/","markdown_url":"https://allluckly.cn/en/guides/manyue-wifi-import/index.md","description":"Upload one comic through ManYue’s Wi-Fi import page, check pairing, the target group, upload and parsing results, then verify local reading.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Connect ManYue to Suwayomi: browse server libraries and chapters","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-suwayomi-library/","markdown_url":"https://allluckly.cn/en/guides/manyue-suwayomi-library/index.md","description":"Connect an existing Suwayomi / Tachidesk library, check chapters and progress, and distinguish server downloads, local offline files and connection identity after a server move.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Maintain ManYue sources: updates, search scope and access failures","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-source-maintenance/","markdown_url":"https://allluckly.cn/en/guides/manyue-source-maintenance/index.md","description":"Check source versions and failure stages, adjust participation in combined search, and handle login, removal and re-adding carefully where reading records are linked.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Import ManYue sources: JS files, ManYue files and subscription URLs","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-source-import/","markdown_url":"https://allluckly.cn/en/guides/manyue-source-import/index.md","description":"Distinguish JS and ManYue source files, single-source URLs and source lists. Add a small set, verify browsing, search and reading, and keep the maintenance source.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue multiple servers: distinguish matching titles and personal library scope","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-server-library-scope/","markdown_url":"https://allluckly.cn/en/guides/manyue-server-library-scope/index.md","description":"Name connections, filter by source and choose all books or only My Comics, then check edition identity and offline content across server libraries.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue progress trackers: connect Bangumi or MyAnimeList and verify matches","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-reading-trackers/","markdown_url":"https://allluckly.cn/en/guides/manyue-reading-trackers/index.md","description":"Connect Bangumi or MyAnimeList, verify each title match, remote-progress import and manual sync, then decide whether to enable automatic updates.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue reading statistics: total time and records by title","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-reading-statistics/","markdown_url":"https://allluckly.cn/en/guides/manyue-reading-statistics/index.md","description":"Review total reading time, today, the last seven days and per-title records. Understand what counts as reading, and distinguish statistics from history cleanup and device screen time.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue reading history: find the last title and position","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-reading-history/","markdown_url":"https://allluckly.cn/en/guides/manyue-reading-history/index.md","description":"Use history and Continue Reading to recover a chapter position, distinguish removing a resume entry, deleting history and deleting a local file, and handle position changes when sources change.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue appearance: dark mode, backgrounds and screen display","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-reading-appearance/","markdown_url":"https://allluckly.cn/en/guides/manyue-reading-appearance/index.md","description":"Adjust the app theme and reader display separately. Use a grayscale sample to check night dimming, background and system brightness together without losing image detail.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue reader controls: page taps and zoom gestures","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-reader-shortcuts/","markdown_url":"https://allluckly.cn/en/guides/manyue-reader-shortcuts/index.md","description":"Establish tap-to-turn, reverse-tap, zoom and menu gestures on iPhone or iPad, then check quick-favourite conflicts and the scope of each setting.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue Read Later: organise a short to-read list","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-read-later/","markdown_url":"https://allluckly.cn/en/guides/manyue-read-later/index.md","description":"Build a three-title plan with Read Later, checking add, filter, resume and remove actions while distinguishing favourites, update following and offline downloads.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Read PDF comics in ManYue: covers, wide pages and reading position","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-pdf-reading/","markdown_url":"https://allluckly.cn/en/guides/manyue-pdf-reading/index.md","description":"Import and check a PDF comic’s cover, page order, landscape spreads, zoom quality and resume position, distinguishing fixed pages from text-layout features.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Read vertical comics in ManYue: continuous scrolling and page joins","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-long-strip-reading/","markdown_url":"https://allluckly.cn/en/guides/manyue-long-strip-reading/index.md","description":"Choose continuous vertical mode for long-strip comics and check seams, side margins, wide images and restored position while preserving the original order and pace.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Connect ManYue to LANraragi: archives, tags and a personal comic library","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-lanraragi-library/","markdown_url":"https://allluckly.cn/en/guides/manyue-lanraragi-library/index.md","description":"Use the native LANraragi connection, check the API key, archive-to-chapter mapping, tag search and page indexes, and establish the scope of local progress and offline downloads.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue image favourites: save pages and revisit them by title","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-image-favorites/","markdown_url":"https://allluckly.cn/en/guides/manyue-image-favorites/index.md","description":"Favourite two reader pages, then find them by work, search or time. Distinguish image favourites, page bookmarks and saving to Photos.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Hide and restore in ManYue: tidy the library and retain reading records","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-hide-restore/","markdown_url":"https://allluckly.cn/en/guides/manyue-hide-restore/index.md","description":"Use hide and restore in ManYue 2.0.2, verify files and reading records remain, and distinguish hiding, removing from Continue Reading, clearing history and deleting local copies.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Follow updates in ManYue: build a list for ongoing reading","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-follow-updates/","markdown_url":"https://allluckly.cn/en/guides/manyue-follow-updates/index.md","description":"Add one serial comic to the update-following list, check update requests, unread status, group following and stopping, and distinguish no updates from a failed check.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue combined search: compare results from your added sources","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-cross-source-search/","markdown_url":"https://allluckly.cn/en/guides/manyue-cross-source-search/index.md","description":"Limit combined search to two working sources, compare author, edition and chapter details, then verify individual-source results rather than assuming matching titles are the same edition.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Search ManYue chapters: find volume names and chapter numbers","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-chapter-search/","markdown_url":"https://allluckly.cn/en/guides/manyue-chapter-search/index.md","description":"Narrow a long contents list by title, chapter number or volume, check ambiguous numbers, sorting and jump results, and keep a reliable reading position.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue batch export: keep downloaded comics as manageable files","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-batch-export/","markdown_url":"https://allluckly.cn/en/guides/manyue-batch-export/index.md","description":"Export local comics to CBZ or PDF in batches, check the ZIP container, save location and page completeness, and distinguish comic-file archives from reading-data backups.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Connect iCouldPlay to WebDAV: enter the address, folder and account correctly","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-webdav-cloud/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-webdav-cloud/index.md","description":"Distinguish a WebDAV service address, webpage sharing link and base path, then verify login, directory access and playback of the same file.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Connect iCouldPlay to UGREEN video: check service addresses and media access","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-ugreen-library/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-ugreen-library/index.md","description":"Follow UGREEN video support in iCouldPlay 1.1.0, distinguish NAS administration and video-service addresses, then verify login, libraries and playback in order.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"iCouldPlay subtitle layout: adjust size, outline and position","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-subtitle-style/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-subtitle-style/index.md","description":"Start with matching ordinary subtitles and compare type size, contrast, outline and placement, checking portrait, landscape, long lines and light scenes.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Connect iCouldPlay to SMB: play home videos from a NAS share","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-smb-nas/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-smb-nas/index.md","description":"Distinguish the SMB host, share name and base path, connect a home NAS and use a small folder to check permissions, scanning and actual playback.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"iCouldPlay search and resume: return to your last viewing position","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-search-resume/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-search-resume/index.md","description":"Confirm the media source and search scope, find your videos with short keywords, then verify how progress, Continue Watching and Play From Beginning relate.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Connect iCouldPlay to Plex: authorise, select a server and check empty libraries","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-plex-library/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-plex-library/index.md","description":"Authorise the Plex account, enter the real server address and separately check the account, server reachability, library permissions and video playback.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Troubleshoot iCouldPlay compatibility: playback engines and video formats","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-player-engine/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-player-engine/index.md","description":"Distinguish containers, video codecs, audio tracks and subtitles, understand automatic selection between the two engines, and compare the same file locally and remotely to locate failures.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Import Photos videos into iCouldPlay: organise travel clips and check orientation","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-photo-import/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-photo-import/index.md","description":"Import a few travel videos through Photos, checking complete downloads, orientation, duration and duplicates to build a repeatable personal-video workflow.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Troubleshoot iCouldPlay streaming stalls: files, networks and servers","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-network-buffering/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-network-buffering/index.md","description":"Compare local and remote playback of one video to locate buffering, failed seeking and disconnections, checking local and remote networks, server transcoding and file bitrate.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"iCouldPlay movie matching: use titles and years to reduce poster mistakes","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-movie-naming/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-movie-naming/index.md","description":"Organise film titles, years and edition details before scanning, check posters and descriptions with a small sample, and retain original files and viewing records.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Correct iCouldPlay metadata: distinguish same-title films and editions","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-metadata-correction/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-metadata-correction/index.md","description":"Before changing a wrong poster or description, identify its file and metadata source, then check title, year, film-versus-series type and server metadata without deleting the video by mistake.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Browse iCouldPlay libraries: categories and card density for a viewing list","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-library-categories/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-library-categories/index.md","description":"Organise browsing by source, film-or-series category and library column count, checking empty filters, duplicate cards and readable titles across devices.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Connect iCouldPlay to Jellyfin: find films and series from your server","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-jellyfin-library/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-jellyfin-library/index.md","description":"Connect an existing Jellyfin service, check the actual port, user-library scope, seasons and episodes, and distinguish empty lists, missing metadata and playback failures.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"iCouldPlay getting started: add a local video to your media library","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-getting-started/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-getting-started/index.md","description":"Import your own video from Files, check the local source, picture, sound and viewing progress, and understand the relationship between the library and original file.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"iCouldPlay FTP sources: test connections and playback with a small folder","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-ftp-source/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-ftp-source/index.md","description":"Add an FTP source and check login, base directory, subfolders and actual video access separately, understanding the differences and limits of FTP, FTPS and SFTP.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"iCouldPlay folder scans: turn a file source into a browsable library","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-folder-scan/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-folder-scan/index.md","description":"Begin with one clear source folder, choose the scan scope and verify items and categories, then handle missed files, matching names and rescan limits.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"iCouldPlay external subtitles: import SRT and check the video edition","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-external-subtitles/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-external-subtitles/index.md","description":"Load an SRT for your video and check language, timing and edition, distinguishing a fixed offset, gradual drift and subtitles already burned into the picture.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Organise series in iCouldPlay: check seasons, episodes and filenames","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-episode-naming/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-episode-naming/index.md","description":"Use a consistent series name and S01E01 numbering, then verify seasons, episode numbers and playback order, including the limits of specials, compilations and multiple editions.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Connect iCouldPlay to Emby: sign in and choose your media library","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-emby-library/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-emby-library/index.md","description":"Use the Emby server address and account permissions to sign in, browse libraries and check movie details and playback, distinguishing server accounts from file-share accounts.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"iCouldPlay audio tracks: select a language and troubleshoot silent video","category":"Tutorials","url":"https://allluckly.cn/en/guides/icouldplay-audio-tracks/","markdown_url":"https://allluckly.cn/en/guides/icouldplay-audio-tracks/index.md","description":"Distinguish audio tracks from subtitle languages, check available sound, system output and file details, and locate issues affecting only some videos.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"iCouldPlay","keywords":[],"version_note":""}
,{"title":"Paint woodland mushrooms in Aquarell: caps, gills and mossy ground","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-woodland-mushrooms/","markdown_url":"https://allluckly.cn/en/guides/aquarell-woodland-mushrooms/index.md","description":"Use one large and one small mushroom to practise cap thickness, gill direction and woodland depth in a simple nature illustration.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell warm–cool still life: an orange against blue cloth","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-warm-cool-still-life/","markdown_url":"https://allluckly.cn/en/guides/aquarell-warm-cool-still-life/index.md","description":"Practise colour temperature, value, area ratios and reflected light with an orange and blue cloth, avoiding equally saturated complementary-colour blocks.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Stipple a pear in Aquarell: describe volume with dot density","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-stippling-pear/","markdown_url":"https://allluckly.cn/en/guides/aquarell-stippling-pear/index.md","description":"Build a pear’s outline, midtones and cast shadow from individual short marks, practising dot size, density and negative space.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell seed-pod study: show the seed arrangement in a cutaway","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-seedpod-cutaway/","markdown_url":"https://allluckly.cn/en/guides/aquarell-seedpod-cutaway/index.md","description":"Draw an open seed pod, observing four types of shape: outer shell, inner wall, seeds and their attachment points.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Paint rainy-night reflections in Aquarell: vertical colour on wet pavement","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-rainy-reflections/","markdown_url":"https://allluckly.cn/en/guides/aquarell-rainy-reflections/index.md","description":"Start from three lights and organise vertical reflections, horizontal breaks and near-to-far perspective on wet pavement without making the whole road a mirror.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell wave study: separate the crest, body and foam with value","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-ocean-foam/","markdown_url":"https://allluckly.cn/en/guides/aquarell-ocean-foam/index.md","description":"Build a wave from dark sea, a lighter wave body and a little foam, practising movement, broken edges and control of white areas.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell negative-space painting: reserve winter branches in the sky","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-negative-space-branches/","markdown_url":"https://allluckly.cn/en/guides/aquarell-negative-space-branches/index.md","description":"Paint the sky between branches to practise negative space, branching rhythm, edge cleanup and unpainted areas in Aquarell.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Paint a moth in Aquarell: balance wing patterns by hand","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-moth-pattern/","markdown_url":"https://allluckly.cn/en/guides/aquarell-moth-pattern/index.md","description":"Draw a moth’s outline and wing patterns manually, using a centre axis, corresponding points and varied density to balance the sides without mirror drawing.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell monochrome portrait: place the features before shading","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-monochrome-portrait/","markdown_url":"https://allluckly.cn/en/guides/aquarell-monochrome-portrait/index.md","description":"Practise the head shape, relative feature positions, three values and edges in a single-colour portrait, avoiding detailed eyes too early.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Paint a night window in Aquarell: make a little warm light the focus","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-lit-window/","markdown_url":"https://allluckly.cn/en/guides/aquarell-lit-window/index.md","description":"Use a night window to practise a large dark area, a small warm light, window-frame overlaps and reflected light on the wall.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell hand sketch: break a pose into palm and finger joints","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-hand-construction/","markdown_url":"https://allluckly.cn/en/guides/aquarell-hand-construction/index.md","description":"Divide a hand into palm, thumb and bent finger segments to practise length, overlap and negative space, then finish with a little shading.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Paint a glass bottle in Aquarell: suggest transparency with background and edges","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-glass-bottle/","markdown_url":"https://allluckly.cn/en/guides/aquarell-glass-bottle/index.md","description":"Use the visible background, light and dark edges and a few highlights to distinguish a glass bottle’s rim, body, liquid level and table shadow.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Draw a four-panel story in Aquarell: keep one character’s actions coherent","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-four-panel-story/","markdown_url":"https://allluckly.cn/en/guides/aquarell-four-panel-story/index.md","description":"Arrange four panels manually, using a consistent character, changing actions, gaze direction and empty space to tell a short story without dialogue.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell fabric folds: organise shadows around the direction of tension","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-fabric-folds/","markdown_url":"https://allluckly.cn/en/guides/aquarell-fabric-folds/index.md","description":"Draw cloth hanging from one point, first identifying tension, fold direction and planes, then placing shadows, bright bands and the hem.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell edge study: draw three stones with hard, soft and lost edges","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-edge-study-stones/","markdown_url":"https://allluckly.cn/en/guides/aquarell-edge-study-stones/index.md","description":"Use three stones to practise clear, soft and disappearing edges, arranging overlaps, contact shadows and surface changes.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell crosshatching: shade a sphere without a solid fill","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-crosshatching-sphere/","markdown_url":"https://allluckly.cn/en/guides/aquarell-crosshatching-sphere/index.md","description":"Use the direction, spacing and overlap of single-colour lines to draw a sphere, practising reserved highlights, the light–shadow boundary and contact shadow.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell cloud study: separate the lit and shaded planes of a white cloud","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-cloud-shapes/","markdown_url":"https://allluckly.cn/en/guides/aquarell-cloud-shapes/index.md","description":"Draw a cumulus cloud with a broad outline and a few shaded areas, practising its top and base, hard and soft edges and open sky.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell rooftop sketch: use two sets of converging lines for a street corner","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-city-rooftops/","markdown_url":"https://allluckly.cn/en/guides/aquarell-city-rooftops/index.md","description":"Draw three simplified corner buildings using a horizon, two convergence directions and roof thickness to establish space, then add a few windows.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell cat silhouettes: keep the pose with a few furry edges","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-cat-silhouette/","markdown_url":"https://allluckly.cn/en/guides/aquarell-cat-silhouette/index.md","description":"Establish a seated cat with four main shapes for head, chest, haunches and tail, then control ears, negative space and a few furry edges without drawing every hair.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Paint breakfast toast in Aquarell: distinguish bread, butter and jam","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-breakfast-toast/","markdown_url":"https://allluckly.cn/en/guides/aquarell-breakfast-toast/index.md","description":"Practise three materials on one slice of toast, using colour, edges, pores and highlights to separate bread, butter and jam.","date":"2026-10-23T00:00:00+08:00","shortdate":"October 23, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"VectorPaint transparent PNG: remove the white background and check edges","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-transparent-png/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-transparent-png/index.md","description":"Use a single-colour icon to check transparency, solid background objects and final pixels, then inspect the export on both dark and light backgrounds.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint text on a path: make a curved text badge","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-text-on-path/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-text-on-path/index.md","description":"Use a short title and simple arc to practise text along a path, adjusting direction, curvature and length while keeping the text original for later edits.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint text layout: make a clear event card","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-text-layout/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-text-layout/index.md","description":"Practise content, fonts, size, alignment and empty space through title, explanation and date levels, so the card communicates more than decoration.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"Import SVG into VectorPaint: inspect structure before editing paths and colours","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-svg-import-edit/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-svg-import-edit/index.md","description":"Check a simple SVG import, distinguishing paths, text, raster images and masks rather than treating the extension as a guarantee of complete editability.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"Save and back up VectorPaint originals: find the editable file next time","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-save-backup/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-save-backup/index.md","description":"Use clear filenames, original-file copies and restore checks to record a project, distinguishing undo, versions, recently deleted items and independent backups.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint pen tutorial: draw a leaf with a few anchors","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-pen-curves/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-pen-curves/index.md","description":"Move from a straight-sided triangle to a closed leaf, learning anchors, handles and curve direction while avoiding crowded nodes and kinks.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint project: design a monochrome mountain icon that reads small","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-monochrome-icon/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-monochrome-icon/index.md","description":"Build a mountain icon around silhouette, negative space and line width, then check recognition at 32, 64 and 128 pixels.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint mask exercise: keep a pattern inside a circular window","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-masks/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-masks/index.md","description":"Use three colour shapes and a circle to practise clipping, masks, stacking and raster boundaries without mistaking a crop for vectorisation.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint layers and groups: make complex work easier to select and edit","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-layers-groups/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-layers-groups/index.md","description":"Organise a small card into background, subject and text layers, learning what layers, groups, overlaps, locking and hiding each do.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint image tracing: turn clear line art into editable paths","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-image-vectorization/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-image-vectorization/index.md","description":"Trace a black-and-white leaf silhouette, compare threshold, colour count and previews, and understand the trade-off between photo quantisation and path complexity.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint grids and guides: composition references for icons and posters","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-grid-guides/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-grid-guides/index.md","description":"Use grids, snapping and guides to control margins and positions while retaining necessary optical adjustments, and keep guides out of the finished artwork.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint gradients: give a circle a clear light direction","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-gradients/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-gradients/index.md","description":"Begin with a two-colour linear gradient, then compare a radial gradient to understand stops, direction, opacity and readability at smaller sizes.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint getting started: build an icon from shapes and export SVG","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-getting-started/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-getting-started/index.md","description":"Start with a small icon made from circles and rectangles to learn canvases, fills and strokes, layer organisation and the choice between SVG and PNG.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint project: a creative-event poster with geometric colour and text","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-geometric-poster/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-geometric-poster/index.md","description":"Organise a portrait poster into title, main artwork and information areas, combining shapes, gradients, alignment and text in one complete exercise.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint fills and strokes: clear colour areas and consistent lines","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-fill-stroke/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-fill-stroke/index.md","description":"Compare fill, no fill, stroke width and opacity on three circles, and understand invisible objects, overly thick lines and mistaken multi-object edits.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"Choose VectorPaint export formats: SVG, PDF, PNG and editable originals","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-export-formats/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-export-formats/index.md","description":"Choose a format for further editing, webpage display or document delivery, explaining the limits of raster images, text and transparent backgrounds.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint canvas sizes: distinguish px, pt, mm and exported pixels","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-canvas-units/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-canvas-units/index.md","description":"Use a square icon and a small printed card to separate canvas proportions, document units, editor zoom and final PNG pixels, avoiding repeated setup changes.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"Edit Bézier nodes in VectorPaint: smooth curves without adding anchors","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-bezier-nodes/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-bezier-nodes/index.md","description":"Use a leaf outline to practise moving anchors, orienting handles and checking corners, separating whole-object distortion from local curve correction.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint shape practice: build a little house from rectangles and circles","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-basic-shapes/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-basic-shapes/index.md","description":"Draw a house to practise rectangles, ellipses, selection, dimensions, stacking and proportions before moving to complex path editing.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"VectorPaint alignment and distribution: arrange three button icons","category":"Tutorials","url":"https://allluckly.cn/en/guides/vectorpaint-align-distribute/","markdown_url":"https://allluckly.cn/en/guides/vectorpaint-align-distribute/index.md","description":"Use three different-width shapes to understand edge alignment, centring and equal distribution, distinguishing centre-to-centre distance from gaps between edges.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"VectorPaint","keywords":[],"version_note":""}
,{"title":"ManYue WebDAV data sync: use a dedicated folder and choose the first direction","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-webdav-sync/","markdown_url":"https://allluckly.cn/en/guides/manyue-webdav-sync/index.md","description":"Sync reading history and favourites through your own WebDAV folder, choose the initial upload or download direction, check the last success time and keep comic-file libraries separate.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Connect ManYue to WebDAV: check the address, library and downloads","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-webdav-library/","markdown_url":"https://allluckly.cn/en/guides/manyue-webdav-library/index.md","description":"Access your comics through a private WebDAV service, distinguish file libraries from data sync, and check folder permissions, library scope and offline copies.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue storage cleanup: distinguish caches, copies, download tasks and shelves","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-storage-cleanup/","markdown_url":"https://allluckly.cn/en/guides/manyue-storage-cleanup/index.md","description":"Confirm which offline content and originals to keep, then clean caches, task records or comic copies by type instead of deleting files to organise shelves.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Connect ManYue to SMB: browse NAS comics and keep offline copies","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-smb-library/","markdown_url":"https://allluckly.cn/en/guides/manyue-smb-library/index.md","description":"Check the SMB host, share name and account permissions, choose a library folder and verify access, then establish what remains available outside the local network.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Troubleshoot ManYue servers: separate network, login, catalogue and page access","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-server-connection-troubleshooting/","markdown_url":"https://allluckly.cn/en/guides/manyue-server-connection-troubleshooting/index.md","description":"Use a known sample to locate the failing stage in WebDAV, SMB, Komga, Kavita or OPDS, and keep error information that can be checked again.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue reading layouts: direction, single pages, double pages and spreads","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-reading-layout/","markdown_url":"https://allluckly.cn/en/guides/manyue-reading-layout/index.md","description":"Match reading mode to page order and device orientation, distinguishing original spreads, paired pages and zoom to establish a reading baseline for each book.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue bookmarks and notes: save a page and return to the right place","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-page-bookmarks/","markdown_url":"https://allluckly.cn/en/guides/manyue-page-bookmarks/index.md","description":"Bookmark reference pages and add short notes, distinguish bookmarks from history and favourites, and check position limits when chapters change.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue OPDS connections: why a catalogue may not support page streaming","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-opds-pse-library/","markdown_url":"https://allluckly.cn/en/guides/manyue-opds-pse-library/index.md","description":"Distinguish OPDS catalogues, whole-file acquisition links and OPDS-PSE page streams, enter the correct catalogue URL and choose a reading or local-import route you can verify.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Prepare ManYue for offline reading: check the whole comic before leaving","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-offline-preflight/","markdown_url":"https://allluckly.cn/en/guides/manyue-offline-preflight/index.md","description":"Check beginning, middle and end pages, chapter changes, reopening and disconnected access to distinguish local copies from remote covers and build a verified travel list.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Connect ManYue to Komga: permissions, series, books and offline checks","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-komga-library/","markdown_url":"https://allluckly.cn/en/guides/manyue-komga-library/index.md","description":"Use your Komga address and account, understand how series and books appear, and verify catalogue access, page-by-page reading and downloads separately.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Connect ManYue to Kavita: sign in and check library permissions","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-kavita-library/","markdown_url":"https://allluckly.cn/en/guides/manyue-kavita-library/index.md","description":"Enter the address and account for the Kavita service, check shared libraries, chapters and download permissions, and avoid copying another client’s connection method without checking it.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Troubleshoot ManYue imports: file access, formats and folder levels","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-import-troubleshooting/","markdown_url":"https://allluckly.cn/en/guides/manyue-import-troubleshooting/index.md","description":"Distinguish files not downloaded, format mismatches, mixed folders, insufficient storage and partial failures, using a small sample you can test repeatedly.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Import image folders into ManYue: one book or separate chapters","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-image-folder-import/","markdown_url":"https://allluckly.cn/en/guides/manyue-image-folder-import/index.md","description":"Choose the correct folder level for a single image book, chapter folders or multiple comic files, avoiding missed imports and incorrect grouping from mixed structures.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue iCloud sync: move reading progress and shelves to another device","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-icloud-sync/","markdown_url":"https://allluckly.cn/en/guides/manyue-icloud-sync/index.md","description":"Confirm the source device’s data, set up automatic or manual iCloud sync, and compare one reading position and one shelf group across both devices.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue getting started: import local comics and read offline","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-getting-started/","markdown_url":"https://allluckly.cn/en/guides/manyue-getting-started/index.md","description":"Start with your own CBZ, CBR or PDF to learn local comic import, shelf selection, offline reading and common issues in ManYue.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue file formats: choose CBZ, CBR, CB7 or PDF and check page order","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-formats-and-page-order/","markdown_url":"https://allluckly.cn/en/guides/manyue-formats-and-page-order/index.md","description":"Distinguish comic archives, PDFs and image folders, organise filenames and chapter structure, then check the cover, page count and spreads after importing.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue downloads: manage the queue, retry failures and verify local copies","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-download-queue/","markdown_url":"https://allluckly.cn/en/guides/manyue-download-queue/index.md","description":"Distinguish queued, downloading, complete and failed states, use pause, resume and retry separately, and do not assume clearing a task record guarantees a file is deleted or retained.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Move ManYue to another device: restore reading state, then comic files","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-device-migration/","markdown_url":"https://allluckly.cn/en/guides/manyue-device-migration/index.md","description":"Divide migration into app data, local comics, server connections and offline checks, and verify each before deciding whether to clear the old device.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Organise ManYue shelves: to read, reading and finished","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-bookshelf-organization/","markdown_url":"https://allluckly.cn/en/guides/manyue-bookshelf-organization/index.md","description":"Create a few stable shelf groups, distinguish moving, copying, removing from a group and deleting a comic, then verify the result with samples.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"ManYue manual backup and restore: keep app data and comic originals separately","category":"Tutorials","url":"https://allluckly.cn/en/guides/manyue-backup-and-restore/","markdown_url":"https://allluckly.cn/en/guides/manyue-backup-and-restore/index.md","description":"Follow app-data export through post-restore checks, identifying the saved state, potentially sensitive information and comic files that need their own backup.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"ManYue","keywords":[],"version_note":""}
,{"title":"Aquarell transparent PNG: check backgrounds and white edges","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-transparent-png/","markdown_url":"https://allluckly.cn/en/guides/aquarell-transparent-png/index.md","description":"Check the background layer and actual pixels, export a transparent PNG, then inspect solid white areas, edges and the file format after sharing on light and dark backgrounds.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell layers: separate sketch, colour and details","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-three-layer-workflow/","markdown_url":"https://allluckly.cn/en/guides/aquarell-three-layer-workflow/index.md","description":"Build a three-layer workflow, understand layer order, the active layer and visibility, then use a simple plant illustration to check that edits stay independent.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell local colouring: limit brushwork with selections, then understand masks","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-selection-local-color/","markdown_url":"https://allluckly.cn/en/guides/aquarell-selection-local-color/index.md","description":"Use a separate practice image to limit brush marks with a selection, check whether it is still active, and distinguish temporary regions, layer masks and direct erasing.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Before exporting Aquarell PSD: raster layers, text and delivery notes","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-psd-handoff/","markdown_url":"https://allluckly.cn/en/guides/aquarell-psd-handoff/index.md","description":"Organise the layers for delivery, compare the PSD with a preview, and explain raster layers, editable text and native projects to the recipient.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Draw a leaf in Aquarell: from outline to soft veins","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-paint-leaf/","markdown_url":"https://allluckly.cn/en/guides/aquarell-paint-leaf/index.md","description":"Draw a simple leaf in three layers, practising shape, colour areas, one-sided shadow and a hierarchy of veins, then export your exercise.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Draw a three-depth landscape in Aquarell: mountains, middle ground and silhouette","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-paint-landscape/","markdown_url":"https://allluckly.cn/en/guides/aquarell-paint-landscape/index.md","description":"Use the tonal relationship of sky, distant mountains and foreground to practise depth. Separate layers, then check that the landscape stays readable on a small screen.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Draw a five-petal flower in Aquarell: rhythm, warm and cool colour, and depth","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-paint-flower/","markdown_url":"https://allluckly.cn/en/guides/aquarell-paint-flower/index.md","description":"Arrange five petals, then practise the main colour, shadows at their bases, the flower centre and empty space without replacing the overall shape with excessive fine lines.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Draw a cup in Aquarell: ellipses, volume and cast shadow","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-paint-cup/","markdown_url":"https://allluckly.cn/en/guides/aquarell-paint-cup/index.md","description":"Build a cup from its rim, body and handle, then use one-sided shading, a bright edge and a table shadow to describe simple volume.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Save native Aquarell projects: keep drafts, finished work and shared images separate","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-native-artwork-backup/","markdown_url":"https://allluckly.cn/en/guides/aquarell-native-artwork-backup/index.md","description":"Use clear filenames and three checks to retain editable Aquarell projects, rather than treating a finished PNG or PSD as the only original.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell colour basics: build a five-colour illustration palette","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-limited-palette/","markdown_url":"https://allluckly.cn/en/guides/aquarell-limited-palette/index.md","description":"Give colours roles as background, subject, shadow and accent, then select and save a palette in Aquarell to reduce arbitrary colour changes while drawing.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell layer opacity: lighten sketches and adjust overlapping colour","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-layer-opacity/","markdown_url":"https://allluckly.cn/en/guides/aquarell-layer-opacity/index.md","description":"Use sketches, shadows and highlights to understand what layer opacity affects, and distinguish brush transparency from compositing a whole layer.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell blog-image export: compare JPEG quality and file size","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-jpeg-for-blog/","markdown_url":"https://allluckly.cn/en/guides/aquarell-jpeg-for-blog/index.md","description":"Choose output dimensions for the real display width, compare JPEG and PNG edges and textures, and reduce damage from repeated compression.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell illustrated cards: arrange a title, drawing and empty space","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-illustrated-card/","markdown_url":"https://allluckly.cn/en/guides/aquarell-illustrated-card/index.md","description":"Plan the text area, illustration and margins of a portrait greeting card, using the text and font controls to make a readable small card.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Draw an icon family in Aquarell: consistent sizes, lines and colours","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-icon-series/","markdown_url":"https://allluckly.cn/en/guides/aquarell-icon-series/index.md","description":"Use a leaf, cup and flower to establish shared canvas, visual-size and colour rules, so three separate drawings feel like one family.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell getting started: create a canvas, draw in layers and export PNG","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-getting-started/","markdown_url":"https://allluckly.cn/en/guides/aquarell-getting-started/index.md","description":"Start with a simple drawing exercise to learn canvas settings, the role of each layer, brush adjustments and PNG or native-project export in Aquarell.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Troubleshoot blurry Aquarell exports: pixels, scaling, brushes and compression","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-export-blur-check/","markdown_url":"https://allluckly.cn/en/guides/aquarell-export-blur-check/index.md","description":"Locate blur at the original, exported-file or published-page stage, distinguishing insufficient pixels, soft brushwork, JPEG compression and webpage enlargement.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell canvas sizes: plan pixels and DPI for blog images","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-canvas-size-dpi/","markdown_url":"https://allluckly.cn/en/guides/aquarell-canvas-size-dpi/index.md","description":"Use a banner, square illustration and small print to distinguish canvas pixels, display width and DPI, so the size fits the intended use before you finish drawing.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell colour sampling: keep touch-ups, shadows and details consistent","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-canvas-color-picking/","markdown_url":"https://allluckly.cn/en/guides/aquarell-canvas-color-picking/index.md","description":"Sample from existing colour areas rather than repeatedly guessing, and check deviations caused by transparent overlaps and edge sampling.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell brush spacing: continuous lines, dotted textures and borders","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-brush-spacing/","markdown_url":"https://allluckly.cn/en/guides/aquarell-brush-spacing/index.md","description":"Keep brush size fixed and compare low, medium and high spacing, then use the results for dotted decoration and hand-drawn borders.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Aquarell brush basics: compare size and opacity in a nine-cell study","category":"Tutorials","url":"https://allluckly.cn/en/guides/aquarell-brush-size-opacity/","markdown_url":"https://allluckly.cn/en/guides/aquarell-brush-size-opacity/index.md","description":"Compare brush size and opacity in a nine-cell exercise, distinguishing a single stroke, repeated colour buildup and layer opacity.","date":"2026-10-22T00:00:00+08:00","shortdate":"October 22, 2026","lang":"en","author":"Bison","app_name":"Aquarell","keywords":[],"version_note":""}
,{"title":"Camera and Microphone Capture with FFmpeg-iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-07-20-camera-and-microphone-capture-with-ffmpeg-ios/","markdown_url":"https://allluckly.cn/en/journal/2017-07-20-camera-and-microphone-capture-with-ffmpeg-ios/index.md","description":"First uses FFmpeg device input support to list cameras and microphones, then presents a native iOS camera-capture example. The two approaches illustrate media-device enumeration and the basic configuration of a system capture session.","date":"2017-07-20T00:00:00+08:00","shortdate":"July 20, 2017","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["FFmpeg","AVFoundation","camera","microphone","audio and video capture"],"version_note":"Published in 2017, the device-input and capture code uses the FFmpeg and AVFoundation APIs available at that time."}
,{"title":"A Simple Streaming Wrapper for FFmpeg-iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-07-12-a-simple-streaming-wrapper-for-ffmpeg-ios/","markdown_url":"https://allluckly.cn/en/journal/2017-07-12-a-simple-streaming-wrapper-for-ffmpeg-ios/index.md","description":"Builds on the preceding FFmpeg articles to set up a local nginx streaming test environment. Server configuration, a client-side streaming wrapper, and playback in VLC connect the process of sending encoded data with checking the resulting stream.","date":"2017-07-12T00:00:00+08:00","shortdate":"July 12, 2017","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["FFmpeg","nginx","RTMP","live streaming","VLC"],"version_note":"Published in 2017, the code and local server configuration reflect the FFmpeg and nginx environments used at that time."}
,{"title":"H.264 Decoding with FFmpeg-iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-07-11-h-264-decoding-with-ffmpeg-ios/","markdown_url":"https://allluckly.cn/en/journal/2017-07-11-h-264-decoding-with-ffmpeg-ios/index.md","description":"Starts by importing FFmpeg-iOS and configuring header search paths, then traces opening media, finding a video stream, initializing the decoder, reading packets, and releasing resources. A wrapper example brings the H.264 decoding steps together.","date":"2017-07-11T00:00:00+08:00","shortdate":"July 11, 2017","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["FFmpeg","H.264","avcodec","video decoding","Header Search Paths"],"version_note":"Published in 2017, the article uses older FFmpeg APIs, including av_register_all and avcodec_decode_video."}
,{"title":"Building FFmpeg-iOS on a Mac","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-07-11-building-ffmpeg-ios-on-a-mac/","markdown_url":"https://allluckly.cn/en/journal/2017-07-11-building-ffmpeg-ios-on-a-mac/index.md","description":"Records preparing gas-preprocessor and yasm on a Mac, then running the FFmpeg-iOS build script. It explains script locations, dependency installation, and output directories to prepare libraries for the later decoding examples.","date":"2017-07-11T00:00:00+08:00","shortdate":"July 11, 2017","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["FFmpeg","gas-preprocessor","yasm","building for iOS"],"version_note":"Published in 2017, the build output includes Homebrew installation logs from El Capitan. Script and permission settings are retained as historical examples."}
,{"title":"DNS Hijacking and Request Handling in iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-05-03-dns-hijacking-and-request-handling-in-ios/","markdown_url":"https://allluckly.cn/en/journal/2017-05-03-dns-hijacking-and-request-handling-in-ios/index.md","description":"Introduces DNS hijacking through unexpected name-resolution results, then describes using NSURLProtocol to adjust requests and resolution. It discusses compatibility boundaries involving IPv6, WebKit, and NSURLSession and retains the implementation examples and references.","date":"2017-05-03T00:00:00+08:00","shortdate":"May 03, 2017","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["DNS","NSURLProtocol","IPv6","WebKit","NSURLSession"],"version_note":"Published in 2017, the request-interception and resolution approaches should be read in light of the framework limitations of that period."}
,{"title":"Practical Automated Testing for iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-04-05-practical-automated-testing-for-ios/","markdown_url":"https://allluckly.cn/en/journal/2017-04-05-practical-automated-testing-for-ios/index.md","description":"Compares unit tests with UI automation and introduces XCTest, Quick, Nimble, KIF, and Appium. It discusses waiting, stubs and mocks, command-line execution, and testable code structure as foundations for maintainable tests.","date":"2017-04-05T00:00:00+08:00","shortdate":"April 05, 2017","lang":"en","author":"黄文臣","app_name":"Aquarell","keywords":["XCTest","Quick","Nimble","KIF","Appium","Mock"],"version_note":"The article explicitly uses Xcode 8.2.1. Framework capabilities and examples are described in that environment."}
,{"title":"Detecting iOS Main-Thread Stalls","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-03-27-detecting-ios-main-thread-stalls/","markdown_url":"https://allluckly.cn/en/journal/2017-03-27-detecting-ios-main-thread-stalls/index.md","description":"Detects stalls by monitoring the main thread's RunLoop state and wait timeouts. It then introduces retrieving thread stack frames, walking call stacks, and symbolication to capture useful diagnostic context while an app is running.","date":"2017-03-27T00:00:00+08:00","shortdate":"March 27, 2017","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["RunLoop","stall detection","call stacks","symbolication","main thread"],"version_note":"Published in 2017, the stack-reading and symbolication code reflects the operating systems and processor architectures of that period."}
,{"title":"Reading CocoaAsyncSocket: Completing the Connection","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-03-09-reading-cocoaasyncsocket-completing-the-connection/","markdown_url":"https://allluckly.cn/en/journal/2017-03-09-reading-cocoaasyncsocket-completing-the-connection/index.md","description":"Continues tracing the CocoaAsyncSocket connection process from local-address binding to connection establishment and callbacks. Low-level socket operations explain the order of asynchronous execution and the purpose of the relevant configuration.","date":"2017-03-09T00:00:00+08:00","shortdate":"March 09, 2017","lang":"en","author":"涂耀辉","app_name":"Aquarell","keywords":["CocoaAsyncSocket","GCDAsyncSocket","bind","asynchronous connections","TCP"],"version_note":"Published in 2017, this installment follows the source version used in the preceding article. Both originals list the same source link."}
,{"title":"Reading CocoaAsyncSocket: Connection Setup","category":"Development notes","url":"https://allluckly.cn/en/journal/2017-02-17-reading-cocoaasyncsocket-connection-setup/","markdown_url":"https://allluckly.cn/en/journal/2017-02-17-reading-cocoaasyncsocket-connection-setup/index.md","description":"Follows GCDAsyncSocket initialization and connection entry points through the CocoaAsyncSocket source. It traces parameter checks, local and server address creation, and socket configuration before connecting, using annotated code to explain the call sequence.","date":"2017-02-17T00:00:00+08:00","shortdate":"February 17, 2017","lang":"en","author":"涂耀辉","app_name":"Aquarell","keywords":["CocoaAsyncSocket","GCDAsyncSocket","Socket","TCP","connection setup"],"version_note":"Published in 2017, this source walkthrough refers to the CocoaAsyncSocket implementation used in the article."}
,{"title":"Custom iOS Transitions with a Two-Line API","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-11-14-custom-ios-transitions-with-a-two-line-api/","markdown_url":"https://allluckly.cn/en/journal/2016-11-14-custom-ios-transitions-with-a-two-line-api/index.md","description":"Introduces WTKTransitionAnimate, selecting transitions through a navigation delegate and factory methods. It combines drag gestures with percentage-based progress to implement an interactive back transition and explains the organization behind the wrapper.","date":"2016-11-14T00:00:00+08:00","shortdate":"November 14, 2016","lang":"en","author":"逆流丶而上","app_name":"Aquarell","keywords":["WTKTransitionAnimate","navigation transitions","interactive animation","Runtime"],"version_note":"Published in 2016, the article uses the custom transition APIs introduced in iOS 7."}
,{"title":"Bitwise Operations in iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-11-07-bitwise-operations-in-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-11-07-bitwise-operations-in-ios/index.md","description":"Introduces bitwise AND, OR, XOR, and NOT, using packed RGBA colors and state flags as examples. It then explains how enumerations and masks can store and query several states together.","date":"2016-11-07T00:00:00+08:00","shortdate":"November 07, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["bitwise operations","bit masks","RGBA","enumerations","state flags"],"version_note":""}
,{"title":"Balancing Code Responsibilities in iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-10-27-balancing-code-responsibilities-in-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-10-27-balancing-code-responsibilities-in-ios/index.md","description":"Uses an example project to examine oversized MVC controllers and the responsibilities of views, models, and controllers. It extracts repeated logic and reassigns functionality, emphasizing clear ownership of code before switching architecture labels.","date":"2016-10-27T00:00:00+08:00","shortdate":"October 27, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["MVC","separation of responsibilities","refactoring","controllers","code reuse"],"version_note":""}
,{"title":"WeChat Mini Programs from Scratch, Part 3","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-10-19-wechat-mini-programs-from-scratch-part-3/","markdown_url":"https://allluckly.cn/en/journal/2016-10-19-wechat-mini-programs-from-scratch-part-3/index.md","description":"Connects an article list to a network request, reads the response, updates the page with setData, and adjusts WXML field bindings. It also records the limitations encountered at the time with image URLs and HTML5 detail pages.","date":"2016-10-19T00:00:00+08:00","shortdate":"October 19, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["WeChat Mini Programs","wx.request","setData","data binding","network requests"],"version_note":"This implementation was recorded during the 2016 closed beta. Its image and HTML5 display issues describe only the author's attempts at that time."}
,{"title":"WeChat Mini Programs from Scratch, Part 2","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-10-18-wechat-mini-programs-from-scratch-part-2/","markdown_url":"https://allluckly.cn/en/journal/2016-10-18-wechat-mini-programs-from-scratch-part-2/index.md","description":"Adds an article detail page to the existing list, using navigator for navigation and parameters. It then adjusts spacing, image placement, and text layout in WXSS to refine the list into the intended page design.","date":"2016-10-18T00:00:00+08:00","shortdate":"October 18, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["WeChat Mini Programs","navigator","WXSS","page navigation","list layout"],"version_note":"This installment was written during the WeChat Mini Programs closed beta in 2016."}
,{"title":"WeChat Mini Programs from Scratch, Part 1","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-10-17-wechat-mini-programs-from-scratch-part-1/","markdown_url":"https://allluckly.cn/en/journal/2016-10-17-wechat-mini-programs-from-scratch-part-1/index.md","description":"Builds an IT Blog mini program from an iOS developer's perspective. It explains the roles of app.json, app.js, WXML, and WXSS, configures a TabBar, and uses templates and list rendering to display article data.","date":"2016-10-17T00:00:00+08:00","shortdate":"October 17, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["WeChat Mini Programs","WXML","WXSS","TabBar","list rendering"],"version_note":"Published in October 2016, the article explicitly dates from the WeChat Mini Programs closed beta."}
,{"title":"Swift 3.0 Design Patterns: Singleton","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-10-13-swift-3-0-design-patterns-singleton/","markdown_url":"https://allluckly.cn/en/journal/2016-10-13-swift-3-0-design-patterns-singleton/index.md","description":"Introduces the uses and trade-offs of Swift singletons, creating shared instances with a static class constant or a global constant. It covers private initializers, access across modules, and the need to consider thread safety for shared mutable state.","date":"2016-10-13T00:00:00+08:00","shortdate":"October 13, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["Swift 3.0","singleton pattern","static let","thread safety"],"version_note":"The article explicitly discusses singleton syntax after Swift 3.0 and changes to the dispatch_once API."}
,{"title":"Swift 3.0 Design Patterns: Flyweight","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-10-13-swift-3-0-design-patterns-flyweight/","markdown_url":"https://allluckly.cn/en/journal/2016-10-13-swift-3-0-design-patterns-flyweight/index.md","description":"Introduces the flyweight pattern through shared local-data managers. A dictionary reuses loaded data and tracks usage counts; unused data is saved and released. The example contrasts this lifecycle with a singleton that remains in memory.","date":"2016-10-13T00:00:00+08:00","shortdate":"October 13, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["Swift 3.0","flyweight pattern","object reuse","data management","reference counting"],"version_note":"The title explicitly places this design-pattern tutorial in the context of Swift 3.0."}
,{"title":"iOS 10 Notifications, Part 2: Service Extensions","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-10-12-ios-10-notifications-part-2-service-extensions/","markdown_url":"https://allluckly.cn/en/journal/2016-10-12-ios-10-notifications-part-2-service-extensions/index.md","description":"Explains how a Notification Service Extension processes content before a notification appears. It covers creating an extension target, changing text, loading attachments, and falling back to the original notification when processing times out.","date":"2016-10-12T00:00:00+08:00","shortdate":"October 12, 2016","lang":"en","author":"徐不同","app_name":"Aquarell","keywords":["UNNotificationServiceExtension","notification attachments","remote notifications","content extensions"],"version_note":"The article covers Notification Service Extension as introduced in iOS 10."}
,{"title":"Practical UITextField Input Rules and Keyboard Handling","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-10-09-practical-uitextfield-input-rules-and-keyboard-handling/","markdown_url":"https://allluckly.cn/en/journal/2016-10-09-practical-uitextfield-input-rules-and-keyboard-handling/index.md","description":"Addresses text length, numeric and currency input, Chinese input composition, and keyboard overlap. Categories and runtime features organize extensible input rules, while keyboard notifications are used to adjust the interface position.","date":"2016-10-09T00:00:00+08:00","shortdate":"October 09, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["UITextField","input validation","Chinese text input","keyboard notifications","Runtime"],"version_note":"Published in 2016, the keyboard-handling example uses the keyWindow and window-moving approaches of that period."}
,{"title":"iOS 10 Notifications, Part 1: Requests, Triggers, and Attachments","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-09-28-ios-10-notifications-part-1-requests-triggers-and-attachments/","markdown_url":"https://allluckly.cn/en/journal/2016-09-28-ios-10-notifications-part-1-requests-triggers-and-attachments/index.md","description":"Uses local notifications to explain the relationship between UNNotificationRequest, triggers, and the notification center. It manages additions, updates, and deletions through identifiers and introduces valid file paths and configuration for notification attachments.","date":"2016-09-28T00:00:00+08:00","shortdate":"September 28, 2016","lang":"en","author":"徐不同","app_name":"Aquarell","keywords":["UNNotificationRequest","UNUserNotificationCenter","local notifications","notification attachments"],"version_note":"The article covers the UserNotifications APIs in iOS 10."}
,{"title":"iOS 10 Push Notifications: The Basics","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-09-27-ios-10-push-notifications-the-basics/","markdown_url":"https://allluckly.cn/en/journal/2016-09-27-ios-10-push-notifications-the-basics/index.md","description":"Starts with enabling push capabilities and checking an existing project's configuration, then introduces iOS 10 notification registration, notification-center delegates, and callbacks. Third-party push integration illustrates the API changes involved in migrating older code.","date":"2016-09-27T00:00:00+08:00","shortdate":"September 27, 2016","lang":"en","author":"徐不同","app_name":"Aquarell","keywords":["iOS 10","UserNotifications","push registration","notification delegates","APNs"],"version_note":"The article covers the initial migration to iOS 10. Its signing and push-environment observations reflect the test conditions at that time."}
,{"title":"Xcode 8 and iOS 10 Compatibility Notes","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-09-22-xcode-8-and-ios-10-compatibility-notes/","markdown_url":"https://allluckly.cn/en/journal/2016-09-22-xcode-8-and-ios-10-compatibility-notes/index.md","description":"Collects migration notes on notifications, ATS, privacy permissions, and interface changes in Xcode 8 and iOS 10. It also records issues involving logging, fonts, list performance, plugins, and xib warnings, with links to official documentation.","date":"2016-09-22T00:00:00+08:00","shortdate":"September 22, 2016","lang":"en","author":"判若两人丶","app_name":"Aquarell","keywords":["iOS 10","Xcode 8","ATS","privacy permissions","migration"],"version_note":"These notes explicitly concern compatibility with Xcode 8 and iOS 10 and retain the issues and approaches recorded at that time."}
,{"title":"Adding iOS 10 Push Notification Extensions in Xcode 8","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-09-21-adding-ios-10-push-notification-extensions-in-xcode-8/","markdown_url":"https://allluckly.cn/en/journal/2016-09-21-adding-ios-10-push-notification-extensions-in-xcode-8/index.md","description":"Records the process of adding iOS 10 notification extensions to an existing app in Xcode 8. It covers push capabilities, signing, Swift versions, architecture settings, and debugging and submission issues for Service and Content extensions.","date":"2016-09-21T00:00:00+08:00","shortdate":"September 21, 2016","lang":"en","author":"zhao0","app_name":"Aquarell","keywords":["iOS 10","Xcode 8","notification extensions","code signing","TestFlight"],"version_note":"The article explicitly uses Xcode 8 and iOS 10 and discusses the choice between Swift 2.3 and Swift 3.0."}
,{"title":"Animating iOS Buttons with Core Animation","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-09-20-animating-ios-buttons-with-core-animation/","markdown_url":"https://allluckly.cn/en/journal/2016-09-20-animating-ios-buttons-with-core-animation/index.md","description":"Builds on Core Animation fundamentals to animate button gradients and shapes with CALayer, CABasicAnimation, and animation groups. It explains layer properties, timing, and the organization of cooperating animations.","date":"2016-09-20T00:00:00+08:00","shortdate":"September 20, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["Core Animation","CABasicAnimation","CAAnimationGroup","button animation"],"version_note":""}
,{"title":"Recreating the Profile Avatar Wave Animation in Baidu Waimai","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-09-09-recreating-the-profile-avatar-wave-animation-in-baidu-waimai/","markdown_url":"https://allluckly.cn/en/journal/2016-09-09-recreating-the-profile-avatar-wave-animation-in-baidu-waimai/index.md","description":"Breaks down the waves around a profile avatar: CADisplayLink drives updates, trigonometric functions generate the curves, and CAShapeLayer draws them. It explains the components needed for a continuous wave animation.","date":"2016-09-09T00:00:00+08:00","shortdate":"September 09, 2016","lang":"en","author":"乔同X","app_name":"Aquarell","keywords":["CADisplayLink","CAShapeLayer","wave animation","trigonometry"],"version_note":""}
,{"title":"Protocols and Delegation in iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-09-01-protocols-and-delegation-in-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-09-01-protocols-and-delegation-in-ios/index.md","description":"Uses UITableView and custom controls to distinguish protocols from delegation. It compares delegate and block callbacks, then discusses how data sources and protocol abstractions can reduce coupling between objects.","date":"2016-09-01T00:00:00+08:00","shortdate":"September 01, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["protocol","delegate","block","data sources","abstraction and decoupling"],"version_note":""}
,{"title":"Objective-C Runtime in Practice: Mapping Dictionaries to Models","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-08-16-objective-c-runtime-in-practice-mapping-dictionaries-to-models/","markdown_url":"https://allluckly.cn/en/journal/2016-08-16-objective-c-runtime-in-practice-mapping-dictionaries-to-models/index.md","description":"Moves from manual assignment, KVC, and third-party model libraries to an NSObject category that traverses runtime information and maps dictionaries to models. It also defines the example's support for two levels of nested data.","date":"2016-08-16T00:00:00+08:00","shortdate":"August 16, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Objective-C Runtime","dictionary-to-model mapping","KVC","NSObject categories"],"version_note":""}
,{"title":"Decoupling iOS Views from Concrete Model Types","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-07-28-decoupling-ios-views-from-concrete-model-types/","markdown_url":"https://allluckly.cn/en/journal/2016-07-28-decoupling-ios-views-from-concrete-model-types/index.md","description":"Uses several types of ticket data with different fields but similar presentation needs to explore a dictionary-backed approach. A protocol exposes common display properties, reducing cells' and controllers' dependence on specific models and clarifying where data conversion belongs.","date":"2016-07-28T00:00:00+08:00","shortdate":"July 28, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["protocols","model decoupling","MVC","dictionaries","view decoupling"],"version_note":""}
,{"title":"Setting Up React Native for iOS Development on a Mac","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-07-27-setting-up-react-native-for-ios-development-on-a-mac/","markdown_url":"https://allluckly.cn/en/journal/2016-07-27-setting-up-react-native-for-ios-development-on-a-mac/index.md","description":"Records a React Native setup on macOS: installing Homebrew, Node.js, watchman, and flow, creating a project, opening the iOS project, and refreshing code in the simulator.","date":"2016-07-27T00:00:00+08:00","shortdate":"July 27, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["React Native","Node.js","watchman","flow","iOS"],"version_note":"Published in 2016, the article uses index.ios.js and the React Native project initialization workflow available at the time."}
,{"title":"RunLoop and Keeping iOS Threads Alive","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-07-26-runloop-and-keeping-ios-threads-alive/","markdown_url":"https://allluckly.cn/en/journal/2016-07-26-runloop-and-keeping-ios-threads-alive/index.md","description":"Uses the networking thread in AFNetworking 2.x to examine RunLoop-based thread lifetimes. It explains how copied run-loop code can retain objects or prevent threads from exiting, then explores more controlled lifecycle handling through examples.","date":"2016-07-26T00:00:00+08:00","shortdate":"July 26, 2016","lang":"en","author":"bestswifter","app_name":"Aquarell","keywords":["RunLoop","NSThread","AFNetworking","thread lifetime","memory leaks"],"version_note":"The article specifically examines the NSURLConnection networking thread implementation in AFNetworking 2.x."}
,{"title":"iOS game development with UIKit: Hardest","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-07-12-ios-game-development-with-uikit-hardest/","markdown_url":"https://allluckly.cn/en/journal/2016-07-12-ios-game-development-with-uikit-hardest/index.md","description":"Introduces the structure of the Hardest mini-game built with Objective-C and UIKit, including level selection, game state, score calculation, sound effects and saved data. It also distinguishes this exercise from work better suited to a dedicated game engine.","date":"2016-07-12T00:00:00+08:00","shortdate":"July 12, 2016","lang":"en","author":"维尼的小熊","app_name":"Aquarell","keywords":["UIKit","mini-games","level management","sound effects","saved data"],"version_note":"Specifies development in Xcode 7.1 and a build environment above Xcode 7.0. The project is a UIKit game-development exercise."}
,{"title":"JavaScript and Native iOS Interaction with JavaScriptCore","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-07-05-javascript-and-native-ios-interaction-with-javascriptcore/","markdown_url":"https://allluckly.cn/en/journal/2016-07-05-javascript-and-native-ios-interaction-with-javascriptcore/index.md","description":"Compares early UIWebView URL interception with JavaScriptCore. Using JSContext, it introduces executing JavaScript from native code, registering native methods, and passing data between the two environments.","date":"2016-07-05T00:00:00+08:00","shortdate":"July 05, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["JavaScriptCore","JSContext","UIWebView","native interoperability","hybrid apps"],"version_note":"The article is organized around the introduction of JavaScriptCore in iOS 7 and uses the WebView interaction approaches of that period."}
,{"title":"Breaking Down a Complex iOS Animation: Objective-C and Swift","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-07-04-breaking-down-a-complex-ios-animation-objective-c-and-swift/","markdown_url":"https://allluckly.cn/en/journal/2016-07-04-breaking-down-a-complex-ios-animation-objective-c-and-swift/index.md","description":"Breaks a welcome-screen animation into circular scaling, elliptical compression, edge bulges, rotation, and a wave fill. The article sequences layer and path changes to show how a visual effect can be translated into implementable animation steps.","date":"2016-07-04T00:00:00+08:00","shortdate":"July 04, 2016","lang":"en","author":"HenryCheng","app_name":"Aquarell","keywords":["CAShapeLayer","path animation","keyframe animation","welcome screen","Swift"],"version_note":"Published in 2016, the article explains the implementation in Swift and also provides an Objective-C example."}
,{"title":"Swift in practice: the template pattern","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-06-29-swift-in-practice-the-template-pattern/","markdown_url":"https://allluckly.cn/en/journal/2016-06-29-swift-in-practice-the-template-pattern/index.md","description":"Uses product data and calculations to examine code that depends on a tuple's structure. Types and protocols then organise reusable processing, showing how abstraction can reduce coupling between parameter formats and business methods.","date":"2016-06-29T00:00:00+08:00","shortdate":"June 29, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["Swift","template pattern","protocols","tuples","code reuse"],"version_note":""}
,{"title":"What's new in iOS 10: SiriKit","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-06-19-what-s-new-in-ios-10-sirikit/","markdown_url":"https://allluckly.cn/en/journal/2016-06-19-what-s-new-in-ios-10-sirikit/index.md","description":"Introduces SiriKit integration following WWDC 2016, from creating an Intents Extension to implementing intent handling and its interface. It explains how a spoken request is interpreted and passed to an app extension for the relevant response.","date":"2016-06-19T00:00:00+08:00","shortdate":"June 19, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["SiriKit","Intents Extension","INExtension","voice interaction"],"version_note":"Explicitly targets iOS 10 and Xcode 8, preserving SiriKit's service categories and extension configuration from that period."}
,{"title":"An introduction to Core Animation on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-06-19-an-introduction-to-core-animation-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-06-19-an-introduction-to-core-animation-on-ios/index.md","description":"Introduces Core Animation through CALayer, CAAnimation and CAAction, explaining the relationship between layers and animation objects, timing control and action lookup. Examples distinguish the organisation of implicit and explicit animations.","date":"2016-06-19T00:00:00+08:00","shortdate":"June 19, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["Core Animation","CALayer","CAAnimation","CAAction","implicit animation"],"version_note":""}
,{"title":"Adding a launch advertisement to an iOS app","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-06-12-adding-a-launch-advertisement-to-an-ios-app/","markdown_url":"https://allluckly.cn/en/journal/2016-06-12-adding-a-launch-advertisement-to-an-ios-app/index.md","description":"Wraps a launch-ad view with full-screen and bottom-logo layouts. SDWebImage fetches the ad image, while opacity animation and block callbacks handle presentation, taps and dismissal.","date":"2016-06-12T00:00:00+08:00","shortdate":"June 12, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["LBLaunchImageAd","splash ads","SDWebImage","block","CABasicAnimation"],"version_note":""}
,{"title":"Wrapping automatic object archiving and unarchiving on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-06-02-wrapping-automatic-object-archiving-and-unarchiving-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-06-02-wrapping-automatic-object-archiving-and-unarchiving-on-ios/index.md","description":"Starts with NSCoding and uses the runtime to enumerate instance variables and organise encoding. The WZXArchiver wrapper develops step by step, with discussion of child objects and the limits of automated storage.","date":"2016-06-02T00:00:00+08:00","shortdate":"June 02, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["NSCoding","WZXArchiver","object archiving","Runtime","instance variables"],"version_note":"Published in 2016. It uses the archiving interfaces of that period and explicitly notes incomplete support for unarchiving nested objects."}
,{"title":"Reading the Objective-C runtime source to understand messaging","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-05-20-reading-the-objective-c-runtime-source-to-understand-messaging/","markdown_url":"https://allluckly.cn/en/journal/2016-05-20-reading-the-objective-c-runtime-source-to-understand-messaging/index.md","description":"Uses an unrecognized selector error to introduce Objective-C messaging, examining method lookup, caching and forwarding in the source. Runtime examples then explain how a method call is resolved during execution.","date":"2016-05-20T00:00:00+08:00","shortdate":"May 20, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["Objective-C Runtime","message sending","method cache","message forwarding","unrecognized selector"],"version_note":"Published in 2016. Source structure and implementation details refer to the Objective-C runtime of that period."}
,{"title":"Integrating ijkplayer for live video on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-05-13-integrating-ijkplayer-for-live-video-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-05-13-integrating-ijkplayer-for-live-video-on-ios/index.md","description":"Records downloading the source, initialising dependencies, compiling FFmpeg, packaging IJKMediaFramework and adding it to an iOS project. The focus is on the role of each directory and build step in the ijkplayer integration.","date":"2016-05-13T00:00:00+08:00","shortdate":"May 13, 2016","lang":"en","author":"jianshu_wl","app_name":"Aquarell","keywords":["ijkplayer","FFmpeg","IJKMediaFramework","video playback","framework compilation"],"version_note":"Published in 2016. The scripts and project configuration correspond to the ijkplayer source used at the time."}
,{"title":"iOS animation: a fragment-based reveal","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-05-12-ios-animation-a-fragment-based-reveal/","markdown_url":"https://allluckly.cn/en/journal/2016-05-12-ios-animation-a-fragment-based-reveal/index.md","description":"Explains how UIView's maskView affects which content is visible, then divides the mask into regions and animates them separately. These steps build a fragmented reveal and an image-carousel transition.","date":"2016-05-12T00:00:00+08:00","shortdate":"May 12, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["maskView","fragment animation","UIView","masking","image carousel"],"version_note":"The implementation is based on UIView's maskView property, available from iOS 8."}
,{"title":"A first look at PhotoKit in Swift","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-05-09-a-first-look-at-photokit-in-swift/","markdown_url":"https://allluckly.cn/en/journal/2016-05-09-a-first-look-at-photokit-in-swift/index.md","description":"Uses a multi-photo picker to introduce PhotoKit, including the maximum selection count, returning an array of PHAsset objects and invoking a closure. The album project and learning resources document an attempt to move from AssetsLibrary to PhotoKit.","date":"2016-05-09T00:00:00+08:00","shortdate":"May 09, 2016","lang":"en","author":"大石头布","app_name":"Aquarell","keywords":["PhotoKit","PHAsset","multiple-photo selection","closures","photo albums"],"version_note":"Published in 2016. It introduces PhotoKit, added in iOS 8, through Swift examples from that period."}
,{"title":"Objective-C runtime in practice: changing fonts throughout an interface","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-05-04-objective-c-runtime-in-practice-changing-fonts-throughout-an-interface/","markdown_url":"https://allluckly.cn/en/journal/2016-05-04-objective-c-runtime-in-practice-changing-fonts-throughout-an-interface/index.md","description":"Starts with registering a custom font and finding its name, then uses Objective-C runtime techniques to replace interface fonts. It discusses the differences between controls created in code and those loaded from a storyboard when applying a common setting.","date":"2016-05-04T00:00:00+08:00","shortdate":"May 04, 2016","lang":"en","author":"HenryCheng","app_name":"Aquarell","keywords":["Objective-C Runtime","custom fonts","UIFont","method swizzling","storyboard"],"version_note":""}
,{"title":"Prompting users to review an iOS app","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-05-03-prompting-users-to-review-an-ios-app/","markdown_url":"https://allluckly.cn/en/journal/2016-05-03-prompting-users-to-review-an-ios-app/index.md","description":"Introduces the LBToAppStore review-prompt wrapper, using the app version, elapsed days and the user's previous choice to decide when to show a dialog. The response either opens the store or postpones the reminder, illustrating an early review-request workflow.","date":"2016-05-03T00:00:00+08:00","shortdate":"May 03, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["LBToAppStore","App Store","UIAlertController","review prompts"],"version_note":"Published in 2016. The older reminder workflow uses UIAlertView, UIAlertController and a link to the store."}
,{"title":"Rich text with hyperlinks on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-04-29-rich-text-with-hyperlinks-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-04-29-rich-text-with-hyperlinks-on-ios/index.md","description":"Draws attributed strings with Core Text, inserts images into reserved text positions and adds hyperlink interaction, then compares the approach with TextKit. The examples connect the basic steps needed for chat emoji and mixed text-and-image layout.","date":"2016-04-29T00:00:00+08:00","shortdate":"April 29, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["Core Text","NSAttributedString","mixed text and images","hyperlinks","TextKit"],"version_note":"Published in 2016. The framework background refers to related capabilities introduced in iOS 6 and iOS 7."}
,{"title":"MVVM and chained network-request architecture","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-04-26-mvvm-and-chained-network-request-architecture/","markdown_url":"https://allluckly.cn/en/journal/2016-04-26-mvvm-and-chained-network-request-architecture/index.md","description":"Begins with growing business logic in a view controller, using a sign-in decision to separate Model, ViewModel and ViewController responsibilities. It then introduces ReactiveCocoa and a chained network-request wrapper for organising business calls.","date":"2016-04-26T00:00:00+08:00","shortdate":"April 26, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["MVVM","ReactiveCocoa","ViewModel","chained requests","WZXNetworking"],"version_note":""}
,{"title":"Optimising UITableViewCell height calculation in Swift","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-04-25-optimising-uitableviewcell-height-calculation-in-swift/","markdown_url":"https://allluckly.cn/en/journal/2016-04-25-optimising-uitableviewcell-height-calculation-in-swift/index.md","description":"Addresses repeated cell-height calculation by drawing on FDTemplateLayoutCell's template measurement and height-caching approach. A Swift wrapper reduces repeated work during table-view scrolling.","date":"2016-04-25T00:00:00+08:00","shortdate":"April 25, 2016","lang":"en","author":"大石头布","app_name":"Aquarell","keywords":["UITableViewCell","row-height caching","FDTemplateLayoutCell","Swift","scrolling performance"],"version_note":"Published in 2016. The Swift implementation uses the list-layout and caching interfaces available then."}
,{"title":"Apple's Xcode testing documentation in Chinese, part 2","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-04-15-apple-s-xcode-testing-documentation-in-chinese-part-2/","markdown_url":"https://allluckly.cn/en/journal/2016-04-15-apple-s-xcode-testing-documentation-in-chinese-part-2/index.md","description":"Continues the Chinese translation of Apple's testing documentation with code coverage, command-line testing, Xcode Server continuous integration and UI test recording. It also discusses structuring testable code and migrating from OCUnit to XCTest.","date":"2016-04-15T00:00:00+08:00","shortdate":"April 15, 2016","lang":"en","author":"许漠颜","app_name":"Aquarell","keywords":["code coverage","Xcode Server","continuous integration","UI testing","OCUnit"],"version_note":"The Chinese translation was published in 2016, primarily in the testing-tool context of Xcode 7, iOS 9 and OS X 10.11."}
,{"title":"Apple's Xcode testing documentation in Chinese, part 1","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-04-15-apple-s-xcode-testing-documentation-in-chinese-part-1/","markdown_url":"https://allluckly.cn/en/journal/2016-04-15-apple-s-xcode-testing-documentation-in-chinese-part-1/index.md","description":"A Chinese translation of earlier Apple testing documentation covering XCTest project setup, test classes and methods, the test lifecycle, performance tests and UI tests. The test navigator illustrates running cases and inspecting their results.","date":"2016-04-15T00:00:00+08:00","shortdate":"April 15, 2016","lang":"en","author":"许漠颜","app_name":"Aquarell","keywords":["XCTest","XCTestCase","unit testing","performance testing","UI testing"],"version_note":"The Chinese translation was published in 2016 and covers testing capabilities and interfaces in Xcode 5, 6 and 7."}
,{"title":"Building a Pomodoro timer app for iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-04-15-building-a-pomodoro-timer-app-for-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-04-15-building-a-pomodoro-timer-app-for-ios/index.md","description":"Connects timers, notification reminders, music playback and a Today Widget in a Pomodoro app. It identifies implementation entry points for card layouts, transitions, xib files and URL Schemes, helping readers follow how the features fit together in the project.","date":"2016-04-15T00:00:00+08:00","shortdate":"April 15, 2016","lang":"en","author":"威權在B612等着那阵温柔的风","app_name":"Aquarell","keywords":["Pomodoro timer","NSTimer","Today Widget","local notifications","custom layouts"],"version_note":"Published in 2016, using the Today Widget, notification and Swift interfaces available at the time."}
,{"title":"Understanding blocks in iOS development","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-04-06-understanding-blocks-in-ios-development/","markdown_url":"https://allluckly.cn/en/journal/2016-04-06-understanding-blocks-in-ios-development/index.md","description":"Starts with block declarations and calls, then examines captured variables and callback wrappers. Examples modelled on Swift's higher-order functions demonstrate how blocks can be used to process data in Objective-C.","date":"2016-04-06T00:00:00+08:00","shortdate":"April 06, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["block","variable capture","Objective-C","callbacks","higher-order functions"],"version_note":""}
,{"title":"Publishing a library to CocoaPods","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-04-04-publishing-a-library-to-cocoapods/","markdown_url":"https://allluckly.cn/en/journal/2016-04-04-publishing-a-library-to-cocoapods/index.md","description":"Records the process of publishing an open-source library: preparing the GitHub project, registering with trunk, writing a podspec, checking versions and tags, validating and submitting. It also explains commonly used specification fields.","date":"2016-04-04T00:00:00+08:00","shortdate":"April 04, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["CocoaPods","podspec","trunk","Git tags","open-source publishing"],"version_note":"Published in 2016. Commands and repository submission steps reflect the CocoaPods service as it worked then."}
,{"title":"Combining AES encryption with Base64 encoding on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-30-combining-aes-encryption-with-base64-encoding-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-03-30-combining-aes-encryption-with-base64-encoding-on-ios/index.md","description":"Defines categories for NSData and NSString to demonstrate a workflow combining AES encryption and decryption with Base64 encoding. It notes that the client and server must agree on the same key and provides a complete demonstration project.","date":"2016-03-30T00:00:00+08:00","shortdate":"March 30, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["AES","Base64","CommonCrypto","NSData","NSString"],"version_note":"Published in 2016. The example uses a CommonCrypto category implementation from that period; Base64 serves as encoding in the workflow."}
,{"title":"iOS animation: a closer look at layout animation","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-23-ios-animation-a-closer-look-at-layout-animation/","markdown_url":"https://allluckly.cn/en/journal/2016-03-23-ios-animation-a-closer-look-at-layout-animation/index.md","description":"Uses an expanding account list and a shrinking button on a login page to demonstrate animating top, height and horizontal-margin constraints. It examines how the view hierarchy and constraint changes work together to produce a continuous transition.","date":"2016-03-23T00:00:00+08:00","shortdate":"March 23, 2016","lang":"en","author":"Sindri","app_name":"Aquarell","keywords":["Auto Layout","layoutIfNeeded","login animation","constraint updates"],"version_note":""}
,{"title":"A circular expanding transition in Swift, inspired by Gewara","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-17-a-circular-expanding-transition-in-swift-inspired-by-gewara/","markdown_url":"https://allluckly.cn/en/journal/2016-03-17-a-circular-expanding-transition-in-swift-inspired-by-gewara/index.md","description":"Moves from an ordinary navigation push to an expanding circular transition, using a CALayer mask to control the revealed area. Gesture-driven animation extends the example, which is explained in Swift with an Objective-C implementation for comparison.","date":"2016-03-17T00:00:00+08:00","shortdate":"March 17, 2016","lang":"en","author":"HenryCheng","app_name":"Aquarell","keywords":["custom transitions","CALayer mask","Swift","interactive animation","UINavigationController"],"version_note":"Published in 2016, using the Swift and navigation-transition delegate interfaces of that period."}
,{"title":"Building a Swift local-cache library step by step","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-16-building-a-swift-local-cache-library-step-by-step/","markdown_url":"https://allluckly.cn/en/journal/2016-03-16-building-a-swift-local-cache-library-step-by-step/index.md","description":"First distinguishes Documents, Caches, Preferences and temporary directories, then wraps a local file cache for objects, images and audio. Offline-browsing scenarios explain directory management and the approach to reading and writing cached content.","date":"2016-03-16T00:00:00+08:00","shortdate":"March 16, 2016","lang":"en","author":"大石头布","app_name":"Aquarell","keywords":["Swift","file caching","app sandbox","Caches","NSUserDefaults"],"version_note":"Published in 2016, using the Swift, file-management and archiving interfaces current at the time."}
,{"title":"Building a WeChat-style iOS app, part 7","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-15-building-a-wechat-style-ios-app-part-7/","markdown_url":"https://allluckly.cn/en/journal/2016-03-15-building-a-wechat-style-ios-app-part-7/index.md","description":"Breaks down the chat input bar and message cells, using blocks to send submission and visibility events to the controller. Message ownership determines avatars and stretchable bubble backgrounds, while model-side sizing accommodates messages of different lengths.","date":"2016-03-15T00:00:00+08:00","shortdate":"March 15, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["chat interface","UITableViewCell","bubble layout","block","dynamic row heights"],"version_note":""}
,{"title":"Building a WeChat-style iOS app, part 6","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-14-building-a-wechat-style-ios-app-part-6/","markdown_url":"https://allluckly.cn/en/journal/2016-03-14-building-a-wechat-style-ios-app-part-6/index.md","description":"Records three issues after integrating chat: matching keyboard animation parameters, managing observers as the app enters and leaves the background, and preserving sign-in state. It includes the handling code and explicitly limits the simplified automatic sign-in example.","date":"2016-03-14T00:00:00+08:00","shortdate":"March 14, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["keyboard notifications","instant messaging","app lifecycle","automatic sign-in"],"version_note":"Explicitly describes automatic sign-in as a simplified implementation that does not consider Keychain. Retained as a historical development record."}
,{"title":"Core Graphics for Swift developers: an in-depth introduction","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-04-core-graphics-for-swift-developers-an-in-depth-introduction/","markdown_url":"https://allluckly.cn/en/journal/2016-03-04-core-graphics-for-swift-developers-an-in-depth-introduction/index.md","description":"Starts with obtaining a drawing context and constructing paths, then draws rectangles, circles, curves, text and images in Swift. Further examples cover linear and radial gradients, blend modes, coordinate transforms, and bitmap and PDF output.","date":"2016-03-04T00:00:00+08:00","shortdate":"March 04, 2016","lang":"en","author":"大石头布","app_name":"Aquarell","keywords":["Core Graphics","Quartz 2D","Bézier curves","gradients","PDF"],"version_note":"Published in 2016, using the Swift and Core Graphics API syntax of that period."}
,{"title":"Remote notifications with JPush: a detailed integration guide","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-03-remote-notifications-with-jpush-a-detailed-integration-guide/","markdown_url":"https://allluckly.cn/en/journal/2016-03-03-remote-notifications-with-jpush-a-detailed-integration-guide/index.md","description":"Prepares remote notifications through App ID configuration, push capabilities and certificate requests, then integrates the JPush SDK. Development and production settings, certificate export and client callbacks document an early push-notification setup workflow.","date":"2016-03-03T00:00:00+08:00","shortdate":"March 03, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["APNs","JPush","push certificates","App ID","remote notifications"],"version_note":"Published in 2016, using the developer-portal interface, certificate workflow and JPush SDK available at the time."}
,{"title":"UIKit performance tuning in practice","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-02-uikit-performance-tuning-in-practice/","markdown_url":"https://allluckly.cn/en/journal/2016-03-02-uikit-performance-tuning-in-practice/index.md","description":"Uses a list interface as an experiment and Instruments' Core Animation tools to examine layer blending, image dimensions, colour formats and offscreen rendering. It connects common scrolling-performance problems with targeted adjustments.","date":"2016-03-02T00:00:00+08:00","shortdate":"March 02, 2016","lang":"en","author":"bestswifter","app_name":"Aquarell","keywords":["Instruments","Core Animation","offscreen rendering","layer blending","scrolling performance"],"version_note":"Published in 2016. Interpret the debugging interface, refresh-rate examples and rendering conclusions in the context of that environment."}
,{"title":"iOS refactoring notes: Extract Method","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-03-01-ios-refactoring-notes-extract-method/","markdown_url":"https://allluckly.cn/en/journal/2016-03-01-ios-refactoring-notes-extract-method/index.md","description":"Applies the Extract Method technique from Refactoring to split long stretches of code into functions organised by intent. Parameters, local variables and return values are handled step by step, with examples showing how to reduce repetition and improve readability.","date":"2016-03-01T00:00:00+08:00","shortdate":"March 01, 2016","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["refactoring","Extract Method","function extraction","local variables","code organisation"],"version_note":""}
,{"title":"Bison's guide to iOS multithreading, part 3","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-29-bison-s-guide-to-ios-multithreading-part-3/","markdown_url":"https://allluckly.cn/en/journal/2016-02-29-bison-s-guide-to-ios-multithreading-part-3/index.md","description":"Explores GCD tasks and queues, comparing the main queue, global queues and custom serial and concurrent queues. Image downloads, repeated execution and one-time initialisation illustrate common ways to submit work.","date":"2016-02-29T00:00:00+08:00","shortdate":"February 29, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["GCD","dispatch_async","dispatch_sync","dispatch_apply","dispatch_once"],"version_note":"Published in 2016, using the Objective-C GCD interfaces. Some conceptual statements in the body need to be checked against the code."}
,{"title":"A first look at Auto Layout animation on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-28-a-first-look-at-auto-layout-animation-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-02-28-a-first-look-at-auto-layout-animation-on-ios/index.md","description":"Introduces constraints through text layouts in portrait and landscape, then breaks down an interface that animates as a list scrolls. Changing constraint values controls element positions and sizes, demonstrating the basics of combining Auto Layout with animation.","date":"2016-02-28T00:00:00+08:00","shortdate":"February 28, 2016","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["Auto Layout","NSLayoutConstraint","constraint animation","scroll interaction"],"version_note":""}
,{"title":"Xcode development tips from a SwiftGG discussion","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-26-xcode-development-tips-from-a-swiftgg-discussion/","markdown_url":"https://allluckly.cn/en/journal/2016-02-26-xcode-development-tips-from-a-swiftgg-discussion/index.md","description":"Collects Xcode techniques from a SwiftGG discussion: exception, symbolic and test-failure breakpoints; inspecting and changing variables during debugging; Quick Look; and reusable code snippets.","date":"2016-02-26T00:00:00+08:00","shortdate":"February 26, 2016","lang":"en","author":"bestswifter","app_name":"Aquarell","keywords":["Xcode","breakpoints","Quick Look","code snippets","SwiftGG"],"version_note":"A record of a 2016 discussion. Debugger and language support are described as they existed at the time."}
,{"title":"GitHub source-code picks, February 22: SmallDay and LoveFreshBeen in Swift 2.0","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-22-github-source-code-picks-february-22-smallday-and-lovefreshbeen-in-swift-2-0/","markdown_url":"https://allluckly.cn/en/journal/2016-02-22-github-source-code-picks-february-22-smallday-and-lovefreshbeen-in-swift-2-0/index.md","description":"Selects two Swift 2.0 recreation projects, SmallDay and LoveFreshBeen. Repository links and an introduction to their author let readers inspect complete projects to study screen organisation and UI implementation.","date":"2016-02-22T00:00:00+08:00","shortdate":"February 22, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Swift 2.0","SmallDay","LoveFreshBeen","open-source projects"],"version_note":"The title specifies Swift 2.0, and the project introduction mentions Xcode 7.0.1."}
,{"title":"Restoring old Xcode plug-ins after a version update","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-19-restoring-old-xcode-plug-ins-after-a-version-update/","markdown_url":"https://allluckly.cn/en/journal/2016-02-19-restoring-old-xcode-plug-ins-after-a-version-update/index.md","description":"Documents historical fixes for plug-ins that stopped loading after an Xcode update or an accidental Skip Bundles selection. It checks compatibility UUIDs, edits plug-in Info.plist files and resets the loading choice.","date":"2016-02-19T00:00:00+08:00","shortdate":"February 19, 2016","lang":"en","author":"许漠颜","app_name":"Aquarell","keywords":["Xcode plug-ins","DVTPlugInCompatibilityUUIDs","Info.plist","defaults"],"version_note":"Compares Xcode 7.1, 7.2 and 7.2.1 and concerns the plug-in loading mechanism used at the time."}
,{"title":"Preparing an iOS app for Apple Pay","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-18-preparing-an-ios-app-for-apple-pay/","markdown_url":"https://allluckly.cn/en/journal/2016-02-18-preparing-an-ios-app-for-apple-pay/index.md","description":"Records early Apple Pay project setup: enabling the capability, creating a Merchant ID and configuring payment-request properties. It also lists questions about country and currency codes; the demonstrated result comes from the simulator identified in the original article.","date":"2016-02-18T00:00:00+08:00","shortdate":"February 18, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Apple Pay","Merchant ID","payment requests","Capabilities"],"version_note":"Mentions iOS 8.1 and discusses the contemporary context of mainland China, iOS 9.2 and iPhone 6."}
,{"title":"A custom pull-to-refresh control in Swift","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-17-a-custom-pull-to-refresh-control-in-swift/","markdown_url":"https://allluckly.cn/en/journal/2016-02-17-a-custom-pull-to-refresh-control-in-swift/index.md","description":"Creates a text view in a xib file to cover UIRefreshControl's default appearance, then rotates, recolours and scales the letters in stages. Simulated loading and row insertion connect the beginning and end of the custom refresh workflow.","date":"2016-02-17T00:00:00+08:00","shortdate":"February 17, 2016","lang":"en","author":"威權在B612等着那阵温柔的风","app_name":"Aquarell","keywords":["Swift","UIRefreshControl","xib","pull to refresh","UITableView"],"version_note":"Published in 2016, using the Swift and NSTimer example syntax of that period."}
,{"title":"Seven Swift pitfalls and how to avoid them","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-16-seven-swift-pitfalls-and-how-to-avoid-them/","markdown_url":"https://allluckly.cn/en/journal/2016-02-16-seven-swift-pitfalls-and-how-to-avoid-them/index.md","description":"Uses code examples to investigate surprising behaviour in protocol extensions, optional-chain assignment and functional processing. It compares dispatch for value and reference types and explains how code can compile successfully while producing an unexpected result.","date":"2016-02-16T00:00:00+08:00","shortdate":"February 16, 2016","lang":"en","author":"bestswifter","app_name":"Aquarell","keywords":["Swift","protocol extensions","optional chaining","value types","functional programming"],"version_note":"Published in 2016. Interpret the language behaviour and examples in the context of the Swift version used then."}
,{"title":"Custom iOS view-controller transitions in practice","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-15-custom-ios-view-controller-transitions-in-practice/","markdown_url":"https://allluckly.cn/en/journal/2016-02-15-custom-ios-view-controller-transitions-in-practice/index.md","description":"Distinguishes the roles of from, to and presenting controllers, then implements custom modal and navigation transitions. Interactive animations and the transition coordinator extend the examples and explain how to organise reusable animation logic.","date":"2016-02-15T00:00:00+08:00","shortdate":"February 15, 2016","lang":"en","author":"bestswifter","app_name":"Aquarell","keywords":["UIViewController transitions","interactive animation","UINavigationController","transition coordinator"],"version_note":"Published in 2016. The implementation uses programmatic Swift from that period, with Objective-C examples for comparison."}
,{"title":"iOS animation: transforms and keyframes","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-15-ios-animation-transforms-and-keyframes/","markdown_url":"https://allluckly.cn/en/journal/2016-02-15-ios-animation-transforms-and-keyframes/index.md","description":"Uses changing seasonal text and falling leaves to explain affine transforms and keyframe animation. Scaling, translation and rotation are combined step by step, showing how transform parameters and animation stages affect the resulting motion.","date":"2016-02-15T00:00:00+08:00","shortdate":"February 15, 2016","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["CGAffineTransform","keyframe animation","UIView","rotation","scaling"],"version_note":""}
,{"title":"Building a WeChat-style iOS app, part 5","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-14-building-a-wechat-style-ios-app-part-5/","markdown_url":"https://allluckly.cn/en/journal/2016-02-14-building-a-wechat-style-ios-app-part-5/index.md","description":"Continues the profile and Moments screens, using AVUser for registration and sign-in and AVFile for avatar uploads. Image compression reduces transfer size, while notes document issues with a pull-down header image and refresh components.","date":"2016-02-14T00:00:00+08:00","shortdate":"February 14, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["AVUser","AVFile","avatar uploads","image compression","WeChat-style app"],"version_note":"Uses LeanCloud-related APIs and components from 2016."}
,{"title":"Core Text layout in Swift 2.0, continued","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-05-core-text-layout-in-swift-2-0-continued/","markdown_url":"https://allluckly.cn/en/journal/2016-02-05-core-text-layout-in-swift-2-0-continued/index.md","description":"Builds on basic Core Text layout by examining baselines, ascenders, descenders and other font metrics. Drawing line by line gives Chinese text and emoji consistent line heights, before extending the rich-text interaction to links and mentions.","date":"2016-02-05T00:00:00+08:00","shortdate":"February 05, 2016","lang":"en","author":"大石头布","app_name":"Aquarell","keywords":["Core Text","CTLineDraw","font metrics","emoji","link detection"],"version_note":"Explicitly targets Swift 2.0 and retains the Core Text example syntax of that period."}
,{"title":"Building a WeChat-style iOS app, part 4","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-03-building-a-wechat-style-ios-app-part-4/","markdown_url":"https://allluckly.cn/en/journal/2016-02-03-building-a-wechat-style-ios-app-part-4/index.md","description":"Adds cloud-storage and instant-messaging dependencies, wraps sign-in and registration methods, and records troubleshooting while querying user data. An early experiment with a password field is included as part of this historical development account.","date":"2016-02-03T00:00:00+08:00","shortdate":"February 03, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["WeChat-style app","cloud storage","user sign-in","user registration"],"version_note":"Uses the LeanCloud-related APIs available at the time and records an experiment with a custom passWord field. It is not an account-security design."}
,{"title":"A beginner developer's review of 2015","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-01-a-beginner-developer-s-review-of-2015/","markdown_url":"https://allluckly.cn/en/journal/2016-02-01-a-beginner-developer-s-review-of-2015/index.md","description":"Reflects on the author's job search, development projects and self-directed learning in 2015. Starting a technical blog, learning Swift, releasing open-source UI components and meeting other developers provide the personal context for this early stage of growth.","date":"2016-02-01T00:00:00+08:00","shortdate":"February 01, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["developer growth","technical blogging","Swift","open-source projects","year in review"],"version_note":""}
,{"title":"Building a WeChat-style iOS app, part 3","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-02-01-building-a-wechat-style-ios-app-part-3/","markdown_url":"https://allluckly.cn/en/journal/2016-02-01-building-a-wechat-style-ios-app-part-3/index.md","description":"Continues the main interface by exposing constraints from xib files and adjusting their constant values for the screen. It also refines navigation-bar button positions and loads images with SDWebImage placeholders.","date":"2016-02-01T00:00:00+08:00","shortdate":"February 01, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["Auto Layout","xib","UIBarButtonItem","SDWebImage"],"version_note":""}
,{"title":"Core Text layout in Swift 2.0: an in-depth introduction","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-31-core-text-layout-in-swift-2-0-an-in-depth-introduction/","markdown_url":"https://allluckly.cn/en/journal/2016-01-31-core-text-layout-in-swift-2-0-an-in-depth-introduction/index.md","description":"Begins with attributed-text properties such as fonts, colours and ranges, then introduces Core Text's layout and drawing steps. Combining text and images illustrates the basic objects needed for more complex text interfaces.","date":"2016-01-31T00:00:00+08:00","shortdate":"January 31, 2016","lang":"en","author":"大石头布","app_name":"Aquarell","keywords":["Swift 2.0","Core Text","NSAttributedString","mixed text and images"],"version_note":"Explicitly targets Swift 2.0, using the attributed-text constants and Core Text syntax current at the time."}
,{"title":"Building a WeChat-style iOS app, part 2","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-30-building-a-wechat-style-ios-app-part-2/","markdown_url":"https://allluckly.cn/en/journal/2016-01-30-building-a-wechat-style-ios-app-part-2/index.md","description":"Builds the Contacts, Discover and profile screens using grouped UITableViews and a custom personal-information cell. Sorting and grouping the contact data demonstrates the initial interface structure shared by several pages.","date":"2016-01-30T00:00:00+08:00","shortdate":"January 30, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["UITableView","contacts","grouped lists","contact sorting"],"version_note":""}
,{"title":"Building a WeChat-style iOS app, part 1","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-29-building-a-wechat-style-ios-app-part-1/","markdown_url":"https://allluckly.cn/en/journal/2016-01-29-building-a-wechat-style-ios-app-part-1/index.md","description":"The opening instalment organises the project and its MVC folders, introduces shared view controllers, and creates the feature pages and UITabBarController. It establishes the common navigation structure that later screens will use.","date":"2016-01-29T00:00:00+08:00","shortdate":"January 29, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["WeChat-style app","MVC","UITabBarController","project structure"],"version_note":""}
,{"title":"Moving cell images as a table view scrolls","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-28-moving-cell-images-as-a-table-view-scrolls/","markdown_url":"https://allluckly.cn/en/journal/2016-01-28-moving-cell-images-as-a-table-view-scrolls/index.md","description":"Adjusts an image's position using the offset between the cell's centre and its parent view's centre, creating parallax during UITableView scrolling. It records the custom cell and visible-item updates, with adapted code and a link to the original project.","date":"2016-01-28T00:00:00+08:00","shortdate":"January 28, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["UITableView","parallax","cell reuse","image offsets"],"version_note":""}
,{"title":"Do you need Alamofire? Trying NSURLSession instead","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-25-do-you-need-alamofire-trying-nsurlsession-instead/","markdown_url":"https://allluckly.cn/en/journal/2016-01-25-do-you-need-alamofire-trying-nsurlsession-instead/index.md","description":"Introduces NSURLSession through a simple data request, distinguishes data, download and upload tasks, and compares default, ephemeral and background configurations. It connects those choices with caching, cookies and the organisation of network tasks.","date":"2016-01-25T00:00:00+08:00","shortdate":"January 25, 2016","lang":"en","author":"大石头布","app_name":"Aquarell","keywords":["NSURLSession","NSURLSessionConfiguration","download tasks","upload tasks","caching"],"version_note":"Published in 2016. The article retains the Swift syntax and NSURLSession naming used at the time."}
,{"title":"iOS animation: starting with UIView animations","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-22-ios-animation-starting-with-uiview-animations/","markdown_url":"https://allluckly.cn/en/journal/2016-01-22-ios-animation-starting-with-uiview-animations/index.md","description":"Uses a login screen's arriving text fields and appearing button to introduce animatable UIView properties, duration and options. Adding spring animations shows how position, opacity and transforms can be combined into a continuous sequence.","date":"2016-01-22T00:00:00+08:00","shortdate":"January 22, 2016","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["UIView animation","animatable properties","spring animation","alpha","login screen"],"version_note":""}
,{"title":"Understanding parallax animation in iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-22-understanding-parallax-animation-in-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-01-22-understanding-parallax-animation-in-ios/index.md","description":"Explains parallax through the positions of several view layers. Dragging the middle layer, compensating for the text layer's offset and clipping overflow keeps the text stationary relative to the bottom layer, showing how occlusion and movement combine.","date":"2016-01-22T00:00:00+08:00","shortdate":"January 22, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["parallax animation","clipsToBounds","view hierarchy","drag gestures"],"version_note":""}
,{"title":"Integrating LianLian Pay into an iOS app","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-20-integrating-lianlian-pay-into-an-ios-app/","markdown_url":"https://allluckly.cn/en/journal/2016-01-20-integrating-lianlian-pay-into-an-ios-app/index.md","description":"Organises the linker options, resource styles and business fields required by the LianLian Pay SDK. It explains user identifiers, card-binding agreements and server callbacks, with notes on signatures and UI customisation settings that are easy to confuse.","date":"2016-01-20T00:00:00+08:00","shortdate":"January 20, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["LianLian Pay","payment SDK","server-side signatures","notify_url","resource customisation"],"version_note":"Published in 2016, based on the LianLian Pay SDK documentation and resource structure available then."}
,{"title":"A League of Legends skin-selection animation with UICollectionViewFlowLayout","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-19-a-league-of-legends-skin-selection-animation-with-uicollectionviewflowlayout/","markdown_url":"https://allluckly.cn/en/journal/2016-01-19-a-league-of-legends-skin-selection-animation-with-uicollectionviewflowlayout/index.md","description":"Builds a character-skin selection effect with a custom UICollectionViewFlowLayout. It adjusts layout attributes and the final scroll position, then integrates the layout subclass into the collection view to keep the selected card centred.","date":"2016-01-19T00:00:00+08:00","shortdate":"January 19, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["UICollectionViewFlowLayout","card layouts","scroll positioning","layout attributes"],"version_note":""}
,{"title":"Bison's guide to iOS multithreading, part 2","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-18-bison-s-guide-to-ios-multithreading-part-2/","markdown_url":"https://allluckly.cn/en/journal/2016-01-18-bison-s-guide-to-ios-multithreading-part-2/index.md","description":"Examines shared data accessed by several threads, introducing synchronized blocks and NSLock locking and unlocking. NSCondition examples then use waiting, signalling and broadcasting to explain coordination between threads.","date":"2016-01-18T00:00:00+08:00","shortdate":"January 18, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["thread safety","synchronized","NSLock","NSCondition"],"version_note":""}
,{"title":"Recreating pop-up effects from Jianshu and Taobao on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-17-recreating-pop-up-effects-from-jianshu-and-taobao-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-01-17-recreating-pop-up-effects-from-jianshu-and-taobao-on-ios/index.md","description":"Separates the effect into content, a dimming overlay and the presented view. Two-stage layer transforms and dismissal animation make the background appear to recede, while the article explains the stacking order when adding views to a window.","date":"2016-01-17T00:00:00+08:00","shortdate":"January 17, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["pop-up views","CATransform3D","overlays","UIWindow"],"version_note":""}
,{"title":"Inside KVO on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-16-inside-kvo-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-01-16-inside-kvo-on-ios/index.md","description":"Starts with observing a list's scroll offset, then examines the dynamic subclass and isa-pointer changes caused by registering an observer. Runtime functions are used to attempt a similar mechanism, connecting practical KVO usage with its underlying behaviour.","date":"2016-01-16T00:00:00+08:00","shortdate":"January 16, 2016","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["KVO","isa","dynamic subclasses","Objective-C Runtime","property observation"],"version_note":""}
,{"title":"Recreating an animation from the National Geographic iOS app","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-14-recreating-an-animation-from-the-national-geographic-ios-app/","markdown_url":"https://allluckly.cn/en/journal/2016-01-14-recreating-an-animation-from-the-national-geographic-ios-app/index.md","description":"Breaks down a National Geographic-inspired pop-up page animation into status-bar hiding, view dragging and spring-back, navigation-bar coordination and back-button colour changes. The implementation follows how several interface layers move together.","date":"2016-01-14T00:00:00+08:00","shortdate":"January 14, 2016","lang":"en","author":"WzxJiang","app_name":"Aquarell","keywords":["UIView animation","drag gestures","navigation bar","status bar"],"version_note":""}
,{"title":"Building a custom pop-up view with HWPopTool","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-13-building-a-custom-pop-up-view-with-hwpoptool/","markdown_url":"https://allluckly.cn/en/journal/2016-01-13-building-a-custom-pop-up-view-with-hwpoptool/index.md","description":"Introduces HWPopTool integration and its controls for the content view, background overlay and close button. It also explains how to handle closing after the component changed its callback mechanism from a delegate to a block.","date":"2016-01-13T00:00:00+08:00","shortdate":"January 13, 2016","lang":"en","author":"HenryCheng","app_name":"Aquarell","keywords":["HWPopTool","pop-up views","overlays","block callbacks"],"version_note":""}
,{"title":"Event delivery and the responder chain in iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-13-event-delivery-and-the-responder-chain-in-ios/","markdown_url":"https://allluckly.cn/en/journal/2016-01-13-event-delivery-and-the-responder-chain-in-ios/index.md","description":"Uses UIResponder, UIEvent and UITouch to explain how touch events reach views. Custom views reveal the relationship between the responder chain and gestures, followed by discussion of how event-delivery behaviour can be used in an interface.","date":"2016-01-13T00:00:00+08:00","shortdate":"January 13, 2016","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["UIResponder","responder chain","UITouch","UIEvent","gesture recognition"],"version_note":""}
,{"title":"Bison's guide to iOS multithreading, part 1","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-13-bison-s-guide-to-ios-multithreading-part-1/","markdown_url":"https://allluckly.cn/en/journal/2016-01-13-bison-s-guide-to-ios-multithreading-part-1/index.md","description":"Introduces multithreading by distinguishing processes from threads and comparing NSThread, NSOperationQueue and GCD. It then demonstrates thread creation, execution, termination and priorities, using logs to observe scheduling behaviour.","date":"2016-01-13T00:00:00+08:00","shortdate":"January 13, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["NSThread","multithreading","thread scheduling","thread priority"],"version_note":""}
,{"title":"Objective-C runtime fundamentals: properties and instance variables","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-10-objective-c-runtime-fundamentals-properties-and-instance-variables/","markdown_url":"https://allluckly.cn/en/journal/2016-01-10-objective-c-runtime-fundamentals-properties-and-instance-variables/index.md","description":"Distinguishes Objective-C properties from instance variables, examining runtime structures, memory offsets and synthesize to explain how properties are generated. Examples then show why dynamically inspecting and manipulating an object's structure can be useful.","date":"2016-01-10T00:00:00+08:00","shortdate":"January 10, 2016","lang":"en","author":"SindriLin","app_name":"Aquarell","keywords":["Objective-C Runtime","property","ivar","synthesize","memory layout"],"version_note":""}
,{"title":"Understanding and using Core Data for persistence","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-10-understanding-and-using-core-data-for-persistence/","markdown_url":"https://allluckly.cn/en/journal/2016-01-10-understanding-and-using-core-data-for-persistence/index.md","description":"Explains the relationship between managed objects, contexts and the persistent store coordinator, then sets up Core Data and an entity model manually. Examples of creating, fetching, updating and deleting objects illustrate the main persistence workflow.","date":"2016-01-10T00:00:00+08:00","shortdate":"January 10, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Core Data","NSManagedObjectContext","entity models","data persistence"],"version_note":""}
,{"title":"GitHub source-code picks, January 4: Bluetooth, launch animations and a custom tab bar","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-04-github-source-code-picks-january-4-bluetooth-launch-animations-and-a-custom-tab-bar/","markdown_url":"https://allluckly.cn/en/journal/2016-01-04-github-source-code-picks-january-4-bluetooth-launch-animations-and-a-custom-tab-bar/index.md","description":"Selects the BabyBluetooth framework, CLClipImageView launch animation and CYLTabBarController tab bar. Project links and selected usage examples introduce the components, including the distinction between Bluetooth central and peripheral modes.","date":"2016-01-04T00:00:00+08:00","shortdate":"January 04, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["BabyBluetooth","CoreBluetooth","CLClipImageView","CYLTabBarController"],"version_note":""}
,{"title":"A Windows AliWangWang-style login screen with a paper-feed animation","category":"Development notes","url":"https://allluckly.cn/en/journal/2016-01-04-a-windows-aliwangwang-style-login-screen-with-a-paper-feed-animation/","markdown_url":"https://allluckly.cn/en/journal/2016-01-04-a-windows-aliwangwang-style-login-screen-with-a-paper-feed-animation/index.md","description":"Recreates the printer-paper login animation from Windows AliWangWang. Keeping the view's horizontal position and width fixed while gradually adjusting its height creates the unfolding effect; the LBPrinterPaper project supplies the example.","date":"2016-01-04T00:00:00+08:00","shortdate":"January 04, 2016","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["UIView animation","frame","login screen","LBPrinterPaper"],"version_note":""}
,{"title":"Bison's collection of solutions to common Git errors","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-12-28-bison-s-collection-of-solutions-to-common-git-errors/","markdown_url":"https://allluckly.cn/en/journal/2015-12-28-bison-s-collection-of-solutions-to-common-git-errors/index.md","description":"Collects index-lock errors and warnings about Git's default push behaviour, with error screenshots and the configuration commands used at the time. It supports reviewing troubleshooting by error type; inspect the current repository state before applying a command.","date":"2015-12-28T00:00:00+08:00","shortdate":"December 28, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Git","index.lock","push.default","commit troubleshooting"],"version_note":"Records Git issues on Windows 7 and the default push settings used at the time."}
,{"title":"Helping Baidu discover a GitHub Pages blog: a historical workflow","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-12-27-helping-baidu-discover-a-github-pages-blog-a-historical-workflow/","markdown_url":"https://allluckly.cn/en/journal/2015-12-27-helping-baidu-discover-a-github-pages-blog-a-historical-workflow/index.md","description":"Records mirroring a GitHub Pages blog to GitCafe Pages, using SourceTree to clone and push branches, bind a domain and configure regional DNS. The workflow aimed to improve access and search indexing in mainland China at the time.","date":"2015-12-27T00:00:00+08:00","shortdate":"December 27, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["GitHub Pages","GitCafe","SourceTree","DNS configuration"],"version_note":"Published in 2015. The workflow depends on the GitCafe Pages service and search-indexing conditions of that period."}
,{"title":"Integrating a Baidu Mobile SSP launch ad in one minute","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-12-26-integrating-a-baidu-mobile-ssp-launch-ad-in-one-minute/","markdown_url":"https://allluckly.cn/en/journal/2015-12-26-integrating-a-baidu-mobile-ssp-launch-ad-in-one-minute/index.md","description":"Records the historical integration of Baidu Mobile SSP splash ads, from platform registration and SDK import to system dependencies, compiler options and launch-time delegate callbacks. It follows the main steps for loading an ad during app startup.","date":"2015-12-26T00:00:00+08:00","shortdate":"December 26, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Baidu SSP","splash ads","BaiduMobAdSplash","SDK integration"],"version_note":"Published in 2015, with iOS 9 compatibility settings and the Baidu SSP SDK of that period."}
,{"title":"GitHub source-code picks, December 25: gesture unlock, a profile SDK and an image carousel","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-12-07-github-source-code-picks-december-25-gesture-unlock-a-profile-sdk-and-an-image-carousel/","markdown_url":"https://allluckly.cn/en/journal/2015-12-07-github-source-code-picks-december-25-gesture-unlock-a-profile-sdk-and-an-image-carousel/index.md","description":"Collects three open-source components for gesture unlocking, a profile page and an infinite image carousel. Download links and selected integration code help readers identify the component that matches an interface requirement.","date":"2015-12-07T00:00:00+08:00","shortdate":"December 07, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["PCGestureUnlock","LBPersonalPage","SDCycleScrollView","open-source components"],"version_note":"A 2015 source-code selection. Check project interfaces and maintenance status separately."}
,{"title":"OCR for debit and credit cards in iOS development","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-12-07-ocr-for-debit-and-credit-cards-in-ios-development/","markdown_url":"https://allluckly.cn/en/journal/2015-12-07-ocr-for-debit-and-credit-cards-in-ios-development/index.md","description":"Introduces card.io SDK integration for scanning card numbers, including linker settings, delegates and recognition callbacks. Objective-C and Swift examples accompany the workflow; the article specifies that the selected implementation is for credit-card scanning.","date":"2015-12-07T00:00:00+08:00","shortdate":"December 07, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["card.io","OCR","credit-card recognition","SDK integration"],"version_note":"Specifies Xcode 7.1 and identifies the selected solution as a credit-card scanner."}
,{"title":"A technical blog can be more than a website","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-11-28-a-technical-blog-can-be-more-than-a-website/","markdown_url":"https://allluckly.cn/en/journal/2015-11-28-a-technical-blog-can-be-more-than-a-website/index.md","description":"Records an experiment in wrapping a personal technical blog as an iOS app. UIWebView displays the home and category pages and handles loading callbacks, while search and interaction-stutter issues remain documented as unresolved at the time.","date":"2015-11-28T00:00:00+08:00","shortdate":"November 28, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["personal blog","UIWebView","hybrid apps","page loading"],"version_note":"Published in 2015. The website wrapper uses UIWebView."}
,{"title":"Mac development series: NSImageView","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-11-23-mac-development-series-nsimageview/","markdown_url":"https://allluckly.cn/en/journal/2015-11-23-mac-development-series-nsimageview/index.md","description":"Demonstrates creating an NSImageView, assigning an image and adding it to a macOS interface. Enabling its backing layer and configuring corner radius and border then produces a circular avatar style.","date":"2015-11-23T00:00:00+08:00","shortdate":"November 23, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["macOS","NSImageView","NSImage","CALayer","rounded corners"],"version_note":""}
,{"title":"Using Alamofire with Swift 2.0","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-11-09-using-alamofire-with-swift-2-0/","markdown_url":"https://allluckly.cn/en/journal/2015-11-09-using-alamofire-with-swift-2-0/index.md","description":"Shows how to import Alamofire manually, configure project dependencies and make network requests in a Swift 2.0 environment. Screenshots identify the project-linking settings, preserving an early framework integration and usage workflow.","date":"2015-11-09T00:00:00+08:00","shortdate":"November 09, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Swift 2.0","Alamofire","network requests","framework integration"],"version_note":"Targets Swift 2.0 and the Alamofire APIs available at the time."}
,{"title":"Integrating an endlessly flipping 3D banner in one minute","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-10-24-integrating-an-endlessly-flipping-3d-banner-in-one-minute/","markdown_url":"https://allluckly.cn/en/journal/2015-10-24-integrating-an-endlessly-flipping-3d-banner-in-one-minute/index.md","description":"Combines left and right swipe gestures with transition animations to cycle through banner images in 3D. It covers component import and tap delegation, while explicitly noting that the effect uses a private animation API and is retained as a technical experiment.","date":"2015-10-24T00:00:00+08:00","shortdate":"October 24, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Banner","CATransition","gesture interaction","private APIs"],"version_note":"Explicitly uses a private system transition API and states that the approach is unsuitable for apps intended for store release."}
,{"title":"Integrating Alipay friend sharing in three minutes","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-10-21-integrating-alipay-friend-sharing-in-three-minutes/","markdown_url":"https://allluckly.cn/en/journal/2015-10-21-integrating-alipay-friend-sharing-in-three-minutes/index.md","description":"Walks through app registration, SDK import, URL Scheme configuration and callbacks for sharing to Alipay friends. It distinguishes the data objects for text, image and web messages, and records checks for installation detection and authentication failures.","date":"2015-10-21T00:00:00+08:00","shortdate":"October 21, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Alipay sharing","SocialSDK","URL Scheme","APMediaMessage"],"version_note":"Uses the 2015 Alipay SocialSDK, with notes on iOS 9 Scheme configuration and Alipay Wallet 9.0."}
,{"title":"iOS 9 3D Touch quick actions, with a Swift update","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-10-19-ios-9-3d-touch-quick-actions-with-a-swift-update/","markdown_url":"https://allluckly.cn/en/journal/2015-10-19-ios-9-3d-touch-quick-actions-with-a-swift-update/index.md","description":"Explains iOS 9 Home Screen quick actions: defining icons, titles and types in Info.plist, then dispatching selections through AppDelegate. Both Objective-C and Swift implementations illustrate the configuration and callback flow.","date":"2015-10-19T00:00:00+08:00","shortdate":"October 19, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["3D Touch","UIApplicationShortcutItem","AppDelegate","quick actions"],"version_note":"Targets Home Screen 3D Touch quick actions from the iOS 9 and iPhone 6s era."}
,{"title":"Practical lessons from localising an iOS app","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-09-29-practical-lessons-from-localising-an-ios-app/","markdown_url":"https://allluckly.cn/en/journal/2015-09-29-practical-lessons-from-localising-an-ios-app/index.md","description":"Reviews translation-file organisation, button-label length, language-region identifiers and localised image names. It focuses on how the language identifier changes in iOS 9 affected logic that detected Chinese in a multilingual project.","date":"2015-09-29T00:00:00+08:00","shortdate":"September 29, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["internationalisation","localisation","language-region identifiers","image resources"],"version_note":"Specifically records adaptation to the region codes added to language identifiers in iOS 9."}
,{"title":"Getting started with XMPP, step by step","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-09-23-getting-started-with-xmpp-step-by-step/","markdown_url":"https://allluckly.cn/en/journal/2015-09-23-getting-started-with-xmpp-step-by-step/index.md","description":"Records the initial integration of XMPP chat: importing dependencies, connecting to Openfire with user information, handling registration and sign-in authentication, and processing message callbacks. Client-side code accompanies the connection and messaging workflow.","date":"2015-09-23T00:00:00+08:00","shortdate":"September 23, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["XMPP","Openfire","instant messaging","user authentication","sending and receiving messages"],"version_note":""}
,{"title":"Building a UICollectionView programmatically in Swift","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-09-19-building-a-uicollectionview-programmatically-in-swift/","markdown_url":"https://allluckly.cn/en/journal/2015-09-19-building-a-uicollectionview-programmatically-in-swift/index.md","description":"Starts with data-source and delegate setup, then builds UICollectionView cells, loads network data and adds reusable headers. These steps bring together the structure of a collection-view interface implemented entirely in Swift code.","date":"2015-09-19T00:00:00+08:00","shortdate":"September 19, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["UICollectionView","Swift","Alamofire","UICollectionReusableView"],"version_note":"Published in 2015, using the Swift and Alamofire syntax current at the time."}
,{"title":"A Swift profile page with a simple integration","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-09-07-a-swift-profile-page-with-a-simple-integration/","markdown_url":"https://allluckly.cn/en/journal/2015-09-07-a-swift-profile-page-with-a-simple-integration/index.md","description":"Shows how to integrate the Swift version of a profile-page component. Importing LBSwift_PersonalPage and inheriting from its controller reuses the interface, while the example code demonstrates the relationship between the wrapper and its callers.","date":"2015-09-07T00:00:00+08:00","shortdate":"September 07, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Swift","LBSwift_PersonalPage","profile screen","UI encapsulation"],"version_note":"Published in 2015. The examples use early Swift syntax."}
,{"title":"An iOS profile page in one minute","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-08-31-an-ios-profile-page-in-one-minute/","markdown_url":"https://allluckly.cn/en/journal/2015-08-31-an-ios-profile-page-in-one-minute/index.md","description":"Introduces integration of the LBPersonalPage_VC profile-page component. Importing its files, inheriting from the base controller and adding configuration lets a project reuse the page's visual behaviour; the example project provides the implementation details.","date":"2015-08-31T00:00:00+08:00","shortdate":"August 31, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["LBPersonalPage","profile screen","UITableView","view-controller inheritance"],"version_note":""}
,{"title":"Exploring Swift: building a tab bar entirely in code","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-08-25-exploring-swift-building-a-tab-bar-entirely-in-code/","markdown_url":"https://allluckly.cn/en/journal/2015-08-25-exploring-swift-building-a-tab-bar-entirely-in-code/index.md","description":"Builds a Zhe800-inspired tab bar using early Swift syntax. It creates child view controllers, assigns titles and icons, and adds them to the system tab bar, illustrating how to organise a navigation structure programmatically.","date":"2015-08-25T00:00:00+08:00","shortdate":"August 25, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Swift","UITabBarController","child view controllers","programmatic layout"],"version_note":"Published in 2015 and written using early Swift syntax."}
,{"title":"Disabling the system swipe-back gesture on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-08-17-disabling-the-system-swipe-back-gesture-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2015-08-17-disabling-the-system-swipe-back-gesture-on-ios/index.md","description":"Addresses an embedded game unexpectedly revealing navigation and tab bars during a swipe. The article shows where to control the navigation controller's built-in back gesture and records how that interaction was disabled for a particular screen.","date":"2015-08-17T00:00:00+08:00","shortdate":"August 17, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["UINavigationController","back gesture","interactivePopGestureRecognizer","embedded games"],"version_note":""}
,{"title":"Detecting device locking in an iOS app","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-07-31-detecting-device-locking-in-an-ios-app/","markdown_url":"https://allluckly.cn/en/journal/2015-07-31-detecting-device-locking-in-an-ios-app/index.md","description":"Records SpringBoard lock-notification handling used to investigate a failure in an embedded game when the device locked. It preserves the troubleshooting approach and callback code; the conditions under which those interfaces may be used need separate verification.","date":"2015-07-31T00:00:00+08:00","shortdate":"July 31, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["lock notifications","SpringBoard","CFNotificationCenter","troubleshooting"],"version_note":"Published in 2015. The example listens for com.apple.springboard lock-screen notifications."}
,{"title":"Animating a view around another view on iOS","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-07-29-animating-a-view-around-another-view-on-ios/","markdown_url":"https://allluckly.cn/en/journal/2015-07-29-animating-a-view-around-another-view-on-ios/index.md","description":"Explains how to move a view around the centre of an image. Trigonometric functions calculate points on a circle, and updating the view coordinates produces an orbiting animation without a complex animation framework.","date":"2015-07-29T00:00:00+08:00","shortdate":"July 29, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["UIView","circular motion","trigonometry","animation"],"version_note":""}
,{"title":"Using UIWebView: techniques and notes","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-07-17-using-uiwebview-techniques-and-notes/","markdown_url":"https://allluckly.cn/en/journal/2015-07-17-using-uiwebview-techniques-and-notes/index.md","description":"Collects common UIWebView settings for loading web pages inside a native interface, including transparent backgrounds, scaling, phone-number detection and JavaScript interaction. It also discusses the layout and communication costs of a cross-platform approach.","date":"2015-07-17T00:00:00+08:00","shortdate":"July 17, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["UIWebView","JavaScript","hybrid development","web page loading"],"version_note":"Uses UIWebView APIs and is retained as a historical implementation record."}
,{"title":"Creating long-form Weibo images in an iOS app","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-07-15-creating-long-form-weibo-images-in-an-ios-app/","markdown_url":"https://allluckly.cn/en/journal/2015-07-15-creating-long-form-weibo-images-in-an-ios-app/index.md","description":"Turns a long passage of text into an image for a long-form Weibo post. The code works through text width, font size, required height and image drawing, demonstrating an early UIKit approach to generating a tall image at a fixed width.","date":"2015-07-15T00:00:00+08:00","shortdate":"July 15, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["tall images","text drawing","UIKit","image generation"],"version_note":""}
,{"title":"Google Maps on iOS: markers and route playback","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-06-21-google-maps-on-ios-markers-and-route-playback/","markdown_url":"https://allluckly.cn/en/journal/2015-06-21-google-maps-on-ios-markers-and-route-playback/index.md","description":"Records a Google Maps integration intended to make map presentation consistent across iOS and Android. It includes the main code for map initialisation, markers and route lines, along with the setup entry point for obtaining a maps API key.","date":"2015-06-21T00:00:00+08:00","shortdate":"June 21, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["Google Maps","GMSMapView","map markers","route playback"],"version_note":""}
,{"title":"Reading iOS contacts and sending SMS invitations","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-06-16-reading-ios-contacts-and-sending-sms-invitations/","markdown_url":"https://allluckly.cn/en/journal/2015-06-16-reading-ios-contacts-and-sending-sms-invitations/index.md","description":"Introduces a small wrapper for a friend-invitation workflow: reading device contacts and opening the SMS composer. It lists the AddressBook, AddressBookUI and MessageUI dependencies and provides the LBContacts example project.","date":"2015-06-16T00:00:00+08:00","shortdate":"June 16, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["contacts","AddressBook","MessageUI","SMS invitations"],"version_note":"Published in 2015. The example depends on AddressBook and AddressBookUI."}
,{"title":"A small iOS scrolling demo inspired by Zhe800","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-06-15-a-small-ios-scrolling-demo-inspired-by-zhe800/","markdown_url":"https://allluckly.cn/en/journal/2015-06-15-a-small-ios-scrolling-demo-inspired-by-zhe800/index.md","description":"Uses a Zhe800-style scrolling interaction to demonstrate recording contentOffset when dragging begins and comparing offsets in scroll callbacks to determine direction. An example project shows how the interface elements respond together.","date":"2015-06-15T00:00:00+08:00","shortdate":"June 15, 2015","lang":"en","author":null,"app_name":"Aquarell","keywords":["UIScrollView","contentOffset","scroll direction","delegate callbacks"],"version_note":""}
,{"title":"Packaging an iOS static library as an .a file","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-06-10-packaging-an-ios-static-library-as-an-a-file/","markdown_url":"https://allluckly.cn/en/journal/2015-06-10-packaging-an-ios-static-library-as-an-a-file/index.md","description":"Records a workflow for building separate device and simulator static libraries in Xcode, inspecting their architectures with lipo and combining the .a files. It explains matching the target platform during testing and checking the resulting library.","date":"2015-06-10T00:00:00+08:00","shortdate":"June 10, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["static libraries","lipo","Xcode","device architectures"],"version_note":"Published in 2015. The packaging workflow builds device and simulator .a libraries separately."}
,{"title":"An illustrated guide to implementing iOS in-app purchases","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-06-04-an-illustrated-guide-to-implementing-ios-in-app-purchases/","markdown_url":"https://allluckly.cn/en/journal/2015-06-04-an-illustrated-guide-to-implementing-ios-in-app-purchases/index.md","description":"An early end-to-end integration guide covering agreements, in-app purchase products, sandbox accounts and client code. It follows StoreKit product requests, the payment queue, transaction-state handling and receipt validation through the setup process.","date":"2015-06-04T00:00:00+08:00","shortdate":"June 04, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["StoreKit","IAP","sandbox testing","transaction queue","receipt validation"],"version_note":"Published in 2015. The implementation uses the older SKProductsRequest, SKPaymentQueue and verifyReceipt workflow."}
,{"title":"iOS App Store rejection cases and solutions: an ongoing record","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-05-22-ios-app-store-rejection-cases-and-solutions-an-ongoing-record/","markdown_url":"https://allluckly.cn/en/journal/2015-05-22-ios-app-store-rejection-cases-and-solutions-an-ongoing-record/index.md","description":"A collection of App Review issues involving crashes, background modes, third-party sign-in, in-app purchases and user content, with the responses used at the time. These historical rules and individual cases help identify categories of review problems.","date":"2015-05-22T00:00:00+08:00","shortdate":"May 22, 2015","lang":"en","author":null,"app_name":"Aquarell","keywords":["App Store","App Review","background modes","in-app purchases"],"version_note":"These review records date from 2015. Recheck rule numbers and proposed remedies against current official requirements."}
,{"title":"Installing and using CocoaPods for iOS development","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-05-20-installing-and-using-cocoapods-for-ios-development/","markdown_url":"https://allluckly.cn/en/journal/2015-05-20-installing-and-using-cocoapods-for-ios-development/index.md","description":"Starting with Ruby and CocoaPods installation, this article explains how to find dependencies, write a Podfile, install pods and open the generated workspace. It also records a fix for header completion, illustrating an early iOS dependency-management workflow.","date":"2015-05-20T00:00:00+08:00","shortdate":"May 20, 2015","lang":"en","author":"Bison","app_name":"Aquarell","keywords":["CocoaPods","Podfile","Ruby","xcworkspace"],"version_note":"Published in 2015. The examples use iOS 7.0, SDWebImage 2.0 and the Ruby mirror address used at the time."}
,{"title":"Disabling and dimming third-party sign-in buttons when the app is not installed","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-05-18-disabling-and-dimming-third-party-sign-in-buttons-when-the-app-is-not-installed/","markdown_url":"https://allluckly.cn/en/journal/2015-05-18-disabling-and-dimming-third-party-sign-in-buttons-when-the-app-is-not-installed/index.md","description":"Uses QQ and WeChat sign-in buttons to show how installation checks can determine whether a button is hidden, disabled or dimmed. It records the interface treatment used when the corresponding third-party app was unavailable.","date":"2015-05-18T00:00:00+08:00","shortdate":"May 18, 2015","lang":"en","author":null,"app_name":"Aquarell","keywords":["third-party sign-in","QQ","WeChat","installation detection","button states"],"version_note":"Published in 2015. Its App Review context and third-party SDK calls are retained as historical records."}
,{"title":"Calculating label heights automatically in a table view","category":"Development notes","url":"https://allluckly.cn/en/journal/2015-05-17-calculating-label-heights-automatically-in-a-table-view/","markdown_url":"https://allluckly.cn/en/journal/2015-05-17-calculating-label-heights-automatically-in-a-table-view/index.md","description":"Calculates the height a label needs from its font, constrained width and measured text, then adds spacing in the UITableView row-height callback. The code illustrates manual sizing of multiline labels and table-view cells.","date":"2015-05-17T00:00:00+08:00","shortdate":"May 17, 2015","lang":"en","author":null,"app_name":"Aquarell","keywords":["UITableView","UILabel","text measurement","dynamic row heights"],"version_note":"Published in 2015. The example measures text manually with sizeWithFont."}
]
