FWIW: У меня была эта проблема, и оказалось, что я пытался запустить симулятор не в той ОС.
Я пытался использовать iOS8.x, а UITesting работает только в iOS9 +.
Переключите версию симулятора, и появится кнопка записи.
Языки сценариев сокращают усилия, необходимые для создания сложных графических интерфейсов, которые в противном случае требуют большого количества склейки инфраструктуры и повторения кода. Несколько наборов инструментов GUI доступны с привязками Lua, в том числе wxWidgets и набор инструментов IUP .
В обеих этих привязках значения функций первого класса и полное закрытие упрощают кодирование обратных вызовов событий и проста в использовании.
Большое приложение, использующее Lua в своем ядре (например, Adobe Photoshop Lightroom), имеет внешнюю программу C / C ++, в которой размещается интерпретатор Lua и обеспечивает доступ к его основным функциям путем регистрации функций C в этом интерпретаторе. Обычно он реализует основные функции, требующие интенсивных вычислений, в функциях C, но оставляет общий поток, работу и даже структуру графического интерфейса для сценариев Lua.
Один из моих любимых примеров - это тест jig я создал для встроенной системы, которая требовала около 1000 строк Lua и 1000 строк C, работала под lua.exe и использовала IUP для представления полного графического интерфейса Windows. Первая версия была запущена примерно через сутки. В C ++ с MFC это потребовало бы как минимум недели работы и многих тысяч строк кода.
Один из моих любимых примеров - это тестовый стенд, который я построил для встроенной системы, которая требовала около 1000 строк Lua и 1000 строк C, работала под lua.exe и использовала IUP чтобы представить полный графический интерфейс Windows. Первая версия была запущена примерно через сутки. В C ++ с MFC это потребовало бы как минимум недели работы и многих тысяч строк кода.
Один из моих любимых примеров - это тестовый стенд, который я построил для встроенной системы, которая требовала около 1000 строк Lua и 1000 строк C, работала под lua.exe и использовала IUP чтобы представить полный графический интерфейс Windows. Первая версия была запущена примерно через сутки. В C ++ с MFC это потребовало бы как минимум недели работы и многих тысяч строк кода.
Один из моих любимых примеров - это тестовый стенд, который я построил для встраиваемой системы, которая требовала около 1000 строк Lua и 1000 строк C, работала под lua.exe и использовала IUP для представления полного графического интерфейса Windows. Первая версия была запущена примерно через сутки. В C ++ с MFC это потребовало бы как минимум недели работы и многих тысяч строк кода.
Один из моих любимых примеров - это тестовый стенд, который я построил для встраиваемой системы, которая требовала около 1000 строк Lua и 1000 строк C, работала под lua.exe и использовала IUP для представления полного графического интерфейса Windows. Первая версия была запущена примерно через сутки. В C ++ с MFC это потребовало бы как минимум недели работы и многих тысяч строк кода.
Попробуйте реализовать таблицу Lua на C / C ++, вы сразу увидите силу Lua.
В Lua:
a["index"] = "value"
В C начните с чтения о связанном списке ...
C ++ STL может помочь, но он будет намного более подробным, чем Lua.
Также Lua отлично подходит для использования. Это так просто (IMHO) взаимодействовать с C.
Не знаю, заставлю ли я "щелкнуть" для вас, но я попробую.
Одно из преимуществ встраивания Lua в том, что вы можете не только использовать его как конфигурационный файл, но на самом деле предлагает ваши C / C ++ - интерфейсы для lua и 'script' их использование через язык сценариев Lua.
Если вы хотите изменить поведение / логику своего приложения, вам просто нужно изменить код в Lua-скрипт без необходимости перекомпилировать все приложение.
Основные области применения - игровые логики, такие как ИИ или конечные автоматы, где для разработки игры важно быстрое время перехода от изменения к игре.
Конечно, тогда основная логика должна присутствовать в Lua-скрипте, а не в C / C ++ - коде, чтобы его можно было эффективно использовать.
Программирование только на C может быть очень утомительной и избыточной задачей, это определенно применимо по сравнению с более абстрактными языками высокого уровня.
В этом смысле вы можете начать и закончить работу намного быстрее, чем делать все непосредственно в C, потому что многие вещи, которые необходимо настроить, выполнить и очистить явно и вручную в C, часто неявно и автоматически обрабатывается языком сценариев, таким как Lua (например, представьте себе управление памятью).
Точно так же гораздо больше абстрактных структур данных и алгоритмов часто напрямую предоставляются такими языками высокого уровня, поэтому вам не нужно заново изобретать колесо и заново реализовывать его, если все, что вам нужно, это стандартный контейнер (подумайте связанный список, дерево, карта и т. д.)
Итак,
В качестве примера того, где Lua подходит лучше, чем C ++, посмотрите на распространение скриптов. Mush Client предлагает Lua в качестве языка сценариев. Как показано по ссылке выше, вы можете многое сделать с Lua для расширения программы. В отличие от C ++, Lua не нужно компилировать и его можно ограничить. Например, вы можете изолировать Lua, чтобы он не мог получить доступ к файловой системе. Это означает, что если вы получите сценарий от кого-то еще, он не сможет уничтожить ваши данные, поскольку не может записывать на диск.
Использование языка сценариев, такого как Lua, имеет много других преимуществ.
Пара преимуществ Lua по сравнению с C ++:
Основные преимущества Lua как языка программирования (помимо возможности встраивания):
for
Трудно найти короткий пример, иллюстрирующий все это. В моем каталоге ~ / bin
находится 191 скрипт Lua; вот тот, который берет вывод pstotext
и объединяет строки, заканчивающиеся дефисом:
local function printf(...) return io.stdout:write(string.format(...)) end
local function eprintf(...) return io.stderr:write(string.format(...)) end
local strfind, strlen = string.find, string.len
function joined_lines(f)
return coroutine.wrap(function()
local s = ''
for l in f:lines() do
s = s .. l
local n = strlen(s)
if strfind(s, '[%-\173]$', n-1) then
s = string.sub(s, 1, n-1)
else
coroutine.yield(s)
s = ''
end
end
end)
end
-- printf('hyphen is %q; index is %d\n', '', string.byte(''))
for _, f in ipairs(arg) do
for l in joined_lines(io.popen('pstotext ' .. f, 'r')) do
printf('%s\n', l)
end
end
В этом примере показано несколько функций, но ничего интересного с таблицами нет.
Вот короткий фрагмент из Программа индексации ключевого слова в контексте, которая извлекает контекст из таблицы и форматирует ключевое слово в контексте. В этом примере более широко используются вложенные функции и показаны еще несколько таблиц и строк:
local function showpos(word, pos, lw, start)
-- word is the key word in which the search string occurs
-- pos is its position in the document
-- lw is the width of the context around the word
-- start is the position of the search string within the word
local shift = (start or 1) - 1 -- number of cols to shift word to align keys
lw = lw - shift -- 'left width'
local rw = cols - 20 - 3 - lw - string.len(words[pos]) -- right width
local data = assert(map:lookup(pos)[1], "no map info for position")
-- data == source of this word
local function range(lo, hi)
-- return words in the range lo..hi, but only in the current section
if lo < data.lo then lo = data.lo end
if hi > data.hi then hi = data.hi end
local t = { }
for i = lo, hi-1 do table.insert(t, words[i]) end
return table.concat(t, ' ')
end
-- grab words on left and right,
-- then format and print as many as we have room for
local left = range(pos-width, pos)
local right = range(pos+1, pos+1+width)
local fmt = string.format('[%%-18.18s] %%%d.%ds %%s %%-%d.%ds\n',
lw, lw, rw, rw)
printf(fmt, data.title, string.sub(left, -lw), word, right)
end